头文件:
#ifndef UART_H #define UART_H #include "S32K144.h" #define PCC_UART1_CLK_SRC ((uint32_t)0x01<<24) #define MY_LPUART_CTRL_RIE ((uint32_t)0x01<<21) void LPUART1_Init(void); void IPUART1_transmit_char(int8_t send); void LPUART1_trans_string(char data_string[]); char LPUART1_receive_char(void); void LPUART_recieve_and_echo_char(void); #endif
C文件:
#include "uart.h"
void LPUART1_PORT_Init(void)
{
PCC->PCCn[PCC_PORTC_INDEX] |= PCC_PCCn_CGC_MASK;
PORTC->PCR[6] |= (uint32_t)0x02<<8;
PORTC->PCR[7] |= (uint32_t)0x02<<8;
}
void LPUART1_Init(void)
{
PCC->PCCn[PCC_LPUART1_INDEX] = ~PCC_PCCn_CGC_MASK;
PCC->PCCn[PCC_LPUART1_INDEX] |= PCC_UART1_CLK_SRC
| PCC_PCCn_CGC_MASK;
LPUART1->BAUD = 0x0E000034;
#if (LPUART1_RX_ITEN == 1)
LPUART1->CTRL = 0x000C0000 | MY_LPUART_CTRL_RIE;
#else
LPUART1->CTRL = 0x000C0000;
#endif
}
void S32_NVIC_EableIRQ(IRQn_Type IRQn, uint8_t Priority)
{
S32_NVIC->ISER[(uint32_t)((uint32_t)IRQn>>5)] = (uint32_t)(0x01 << (((uint32_t)IRQn) & ((uint32_t)0x1F)));
S32_NVIC->IP[IRQn] = (uint8_t)Priority<<4;
}
void LPUART1_Config(void)
{
LPUART1_PORT_Init();
LPUART1_Init();
#if (LPUART1_RX_ITEN == 1)
S32_NVIC_EableIRQ(LPUART1_RxTx_IRQn,1);
#endif
}
void IPUART1_transmit_char(int8_t send)
{
while(((LPUART1->STAT & LPUART_STAT_TDRE_MASK)>>LPUART_STAT_TDRE_SHIFT) == 0);
LPUART1->DATA = send;
}
void LPUART1_trans_string(char data_string[])
{
uint32_t i;
while(data_string[i] != ' '){
IPUART1_transmit_char(data_string[i]);
i++;
}
}
char LPUART1_receive_char(void)
{
char recieve;
while(((LPUART1->STAT & LPUART_STAT_RDRF_MASK)>>LPUART_STAT_RDRF_SHIFT) == 0);
recieve = LPUART1->DATA;
return recieve;
}
void LPUART_recieve_and_echo_char(void)
{
char send = LPUART1_receive_char();
IPUART1_transmit_char(send);
IPUART1_transmit_char('n');
IPUART1_transmit_char('r');
}
int8_t recieve_mes;
void LPUART1_RxTx_IRQHandler(void)
{
if(((LPUART1->STAT & LPUART_STAT_RDRF_MASK)>>LPUART_STAT_RDRF_SHIFT) == 1)
{
recieve_mes = LPUART1->DATA;
}
}
main函数:
#include "S32K144.h"
#include "clocks_and_modes.h"
#include "led.h"
#include "key.h"
#include "exit.h"
#include "uart.h"
void Dleay_us(uint32_t delay_us)
{
volatile uint32_t num;
volatile uint32_t t;
for(num = 0; num < delay_us; num++)
{
t = 11;
while(t){
t--;
}
}
}
void Dleay_ms(uint16_t delay_ms)
{
volatile uint32_t num;
for(num = 0; num < delay_ms; num++)
{
Dleay_us(1000);
}
}
int main(void)
{
My_Sysclock_Config();
LPUART1_Init();
while(1)
{
LPUART_recieve_and_echo_char();
}
}



