- 串口初始化
void Sci_init()
{
Uint16 scibaud ,scihbaud,scilbaud;
EALLOW;
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1;
EDIS;
EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
EDIS;
SciaRegs.SCIFFTX.all=0xE040;
SciaRegs.SCIFFRX.all=0x6061;
SciaRegs.SCIFFCT.all=0x0;
SciaRegs.SCICCR.all =0x0007;
SciaRegs.SCICTL1.all =0x0003;
SciaRegs.SCICTL2.bit.RXBKINTENA =1;
scibaud=15000000/(8*SCI_BAUD)-1;
scihbaud=scibaud>>8;
scilbaud=scibaud&0xff;
SciaRegs.SCIHBAUD =scihbaud;
SciaRegs.SCILBAUD =scilbaud;
SciaRegs.SCICTL1.all =0x0023;
}
- 串口中断配置
此处不同芯片的表不一样
EALLOW;
PieVectTable.SCIRXINTA = &Scia_RX_ISR;
EDIS;
EALLOW;
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
PieCtrlRegs.PIEIER9.bit.INTx1=1;
IER |= M_INT9;
EINT;
ERTM;
EDIS;
- 串口中断服务函数
int reecv_count = 0 ;
char recv_str[64];
char recvdd = 0;
__interrupt void Scia_RX_ISR()
{
recvdd = SciaRegs.SCIRXBUF.bit.RXDT;
recv_str[reecv_count] = recvdd;
reecv_count++;
if(recvdd == '\n'){
Deal_Data(recv_str ,reecv_count);
memset(recv_str , 0 , sizeof(recv_str));
reecv_count =0;
}
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;
PieCtrlRegs.PIEACK.all |= M_INT9;
}