|
本帖最后由 伍师傅32 于 2015-9-23 15:49 编辑
开开心心写完程序,结果发现竟然最简单的串口通信程序也一直调试通过不了,真是伤心啊。
用仿真器看,能够进入串口接收中断,可是接收的数据完全不对,用它发送数据,也不成功。
现把程序贴在下面,恳请论坛里的朋友帮忙找找原因。
- void main(void)
- {
- InitSysCtrl();
- DINT;
- InitPieCtrl();
-
- /*初始化中断向量表*/
- InitPieVectTable();
-
- EALLOW;
- PieVectTable.TINT0 = &cpu_timer0_isr;
- PieVectTable.SCIRXINTA = &scia_rx_isr;
- EDIS;
-
- /*初始化相关外设*/
- SCI_Init(SCIA, B9600);
- SCI_Send_One_Char(SCIA, 'h');
- SCI_Send_One_Char(SCIA, 'e');
- SCI_Send_One_Char(SCIA, 'l');
- SCI_Send_One_Char(SCIA, 'l');
- SCI_Send_One_Char(SCIA, 'o');
- SCI_Send_One_Char(SCIA, '\n');
- /*外设中断开关*/
- IER |= M_INT9;
- PieCtrlRegs.PIEIER9.bit.INTx1 = 1; //使能SCIARX中断
-
- /*使能全局中断*/
- EINT;
- ERTM;
- while(1)
- {
- MAX706_Feed_Dog();
- }
- }
- /*
- * 说明:SCIA的接收中断
- */
- interrupt void scia_rx_isr()
- {
- Uint16 cData;
- cData = SciaRegs.SCIRXBUF.all;
- SCI_Send_One_Char(SCIA, cData);
- PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
- }
- /*
- * 说明: 配置串口
- * 输入:NO - 串口端号,可以选择SCIA、SCIB、SCIC
- * baudrate - 串口的波特率
- * 注: TMS320F28335的串口输出引脚可以有多个选择,在引脚配置中进行对应设置即可
- */
- void SCI_Init(SCI_TypeDef NO, SCI_BaudrateTepeDef baudrate)
- {
- volatile struct SCI_REGS *SCIx;
- /*引脚配置*/
- switch(NO)
- {
- case SCIA:
- {
- EALLOW;
- GpioCtrlRegs.GPBPUD.bit.GPIO35 = 0;
- GpioCtrlRegs.GPBPUD.bit.GPIO36 = 0; //设置端口上拉
- GpioCtrlRegs.GPBQSEL1.bit.GPIO36 = 3; //RX脚输入
- GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 1; //选择为SCITXDA功能
- GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 1; //选择为SCIRXDA功能
- EDIS;
- SCIx = &SciaRegs;
- break;
- }
- case SCIB:
- {
- EALLOW;
- GpioCtrlRegs.GPAPUD.bit.GPIO9 = 0;
- GpioCtrlRegs.GPAPUD.bit.GPIO11 = 0; //设置端口上拉
- GpioCtrlRegs.GPAQSEL1.bit.GPIO11 = 3; //RX脚输入
- GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 2; //选择为SCITXDB功能
- GpioCtrlRegs.GPAMUX1.bit.GPIO11 = 2; //选择为SCIRXDB功能
- EDIS;
- SCIx = &ScibRegs;
- break;
- }
- case SCIC:
- {
- EALLOW;
- GpioCtrlRegs.GPBPUD.bit.GPIO62 = 0;
- GpioCtrlRegs.GPBPUD.bit.GPIO63 = 0; //设置端口上拉
- GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; //RX脚输入
- GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 1; //选择为SCITXDC功能
- GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 1; //选择为SCIRXDC功能
- EDIS;
- SCIx = &ScicRegs;
- break;
- }
- }
-
- (*SCIx).SCICTL1.all =0x0003;
- (*SCIx).SCICCR.all = 0x0007;
- (*SCIx).SCICTL2.bit.RXBKINTENA =1;
- /*波特率设置*/
- switch(baudrate)
- {
- case B2400:
- {
- (*SCIx).SCIHBAUD = 0x0007;
- (*SCIx).SCILBAUD = 0x00A0;
- break;
- }
- case B4800:
- {
- (*SCIx).SCIHBAUD = 0x0003;
- (*SCIx).SCILBAUD = 0x00D0;
- break;
- }
- case B9600:
- {
- (*SCIx).SCIHBAUD = 0x0001;
- (*SCIx).SCILBAUD = 0x00E7;
- break;
- }
- case B19200:
- {
- (*SCIx).SCIHBAUD = 0x0000;
- (*SCIx).SCILBAUD = 0x00F3;
- break;
- }
- case B38400:
- {
- (*SCIx).SCIHBAUD = 0x0000;
- (*SCIx).SCILBAUD = 0x0079;
- break;
- }
- case B115200:
- {
- (*SCIx).SCIHBAUD = 0x0000;
- (*SCIx).SCILBAUD = 0x0028;
- break;
- }
- }
- (*SCIx).SCICTL1.bit.SWRESET = 1; // Relinquish SCI from Reset
- }
- /*
- * 说明: 通过串口发送一个字符
- * 输入: NO - 串口端号,可以选择SCIA、SCIB、SCIC
- * cdata - 需要发送的字符
- */
- void SCI_Send_One_Char(SCI_TypeDef NO, Uint16 cdata)
- {
- volatile struct SCI_REGS *SCIx;
-
- switch(NO)
- {
- case SCIA: SCIx = &SciaRegs; break;
- case SCIB: SCIx = &ScibRegs; break;
- case SCIC: SCIx = &ScicRegs; break;
- }
- (*SCIx).SCITXBUF = cdata;
- while((*SCIx).SCICTL2.bit.TXRDY == 0);
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|