TMS320F28335 串列埠 SCI
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
TMS320F28335的串列埠有三個串列埠,SCIA,SCIB和SCIC,GPIO的管腳對應如下:
SCIA對應GPIO28/29和GPIO35/36兩組可選,SCIB有四組管腳可以選擇,分別是GPIO9/11,GPIO14/15,GPIO18/19,GPIO22/23,SCIC對應的是GPIO62/63
首先需要定義管腳。
void InitSciaGpio() //初始化GPIO管腳
{
EALLOW;
//根據硬體設計決定採用GPIO28/29和GPIO35/36中的哪一組。這裡以35/36為例
//定義管腳為上拉
GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0;
GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;
//定義管腳為非同步輸入
GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3;
//配置管腳為SCI功能管腳
GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1;
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1;
EDIS;
}
SCIB和SCIC的配置差不多。
下來就要定義波特率等等了。例子是9600bps,1,8,n,1.
void scia_init()
{
SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback
// No parity,8 char bits,
// async mode, idle-line protocol
SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK,
// Disable RX ERR, SLEEP, TXWAKE
SciaRegs.SCICTL2.bit.TXINTENA =1; //傳送中斷使能
SciaRegs.SCICTL2.bit.RXBKINTENA =1;//接收中斷使能
SciaRegs.SCIHBAUD =0x0001; // 9600 baud @LSPCLK = 37.5MHz.
SciaRegs.SCILBAUD =0x00E7;
SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset
}
接著進行中斷的配置
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.SCIRXINTA = &sciaRxIsr;
PieVectTable.SCITXINTA = &sciaTxIsr;
PieVectTable.SCIRXINTB = &scibRxIsr;
PieVectTable.SCITXINTB = &scibTxIsr;
EDIS; // This is needed to disable write to EALLOW protected registers
上面是將SCIA和SCIB的中斷服務程式連到PIE的中斷表中,發生中斷就會跑到你的ISR去了
下面就是開中斷了。PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIEblock
PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIEGroup 9, int1
PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIEGroup 9, INT2
PieCtrlRegs.PIEIER9.bit.INTx3=1; // PIEGroup 9, INT3
PieCtrlRegs.PIEIER9.bit.INTx4=1; // PIEGroup 9, INT4
IER = 0x100; // Enable CPU INT
EINT;
。。。。串列埠 OK 了