这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » FPGA » dsp--28335的使用fifo的串口中断实验

共7条 1/1 1 跳转至

dsp--28335的使用fifo的串口中断实验

专家
2014-09-29 20:04:40     打赏

早在去年的这个时候就搞定了28335的串口实验,包括使用和不使用fifo的,今天再度捡起,竟然耗费了将近一天的时间来搞明白,菜鸟真心伤不起,现在记录下不使用fifo的串口中断实验过程和自己曾经和现在犯得错误。

1:硬件连接

首先:dsp的仿真器的连接让我很无语,不过按照这个步骤应该是没有问题的。

上电顺序:1连接好dsp板子和仿真器的jtag线,2仿真器的usb口和电脑连接,3板子上电,4ccs软件connect(Alt+c)

下电顺序:1ccs软件disconnect(Alt+c),2板子下电,3拔下仿真器的usb口和电脑连接,4拔下dsp板子和仿真器的jtag线

可见:上电和下电是相反的,严格按照这个顺序基本不会出错。注意,千万不要在板子上电的时候插拔jtag口。


2:dsp28335启动过程


说明: 复位后,跳转到0x3FFFC0地址,该地址在Boot Rom中,这个是复位向量,直接跳到Init Boot。

   Init Boot,是复位后第一个被调用的汇编程序,在Boot Rom中,功能,初始化设备,读取gpio状态,来选择bootloader模式。

   一般如果是RAM或者flash启动,这个时候他的入口地址放的code_start,然后跳转到c_init00

(在DSP2833x_CodeStartBranch.asm),也可以看到


c_init00:完成c环境和全局变量的初始化,在RTS Library ,rts2800_fpg32.lib中。

最后进入我们的main函数。这样才是dsp的启动过程。

3回到串口中断上来

对于串口中断,最重要的莫过于串口的寄存器设置问题以及串口中断函数。这次博客中不涉及到fifo的串口中断,串口的寄存器配置为:


注意:我这里波特率为9600,但是系统的时钟和书上的不一样,因此,数值是不一样的,你需要自己计算。(随便找本书都能找到计算波特率的公式)


[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. #include "DSP2833x_Device.h"  
  2. #include "DSP2833x_Examples.h"  
  3. void sci_init(void);  
  4. interrupt void uartIsr(void);  
  5. interrupt void uart_send(void);  
  6. void delay(void);  
  7. unsigned char  m;  
  8. void main(void)  
  9. {  
  10.     InitSysCtrl();  
  11.     DINT;  
  12.     IER = 0x0000;  
  13.     IFR = 0x0000;  
  14.     InitPieCtrl();  
  15.     InitPieVectTable();  
  16.     EnableInterrupts();  
  17.    InitScicGpio();  
  18.     sci_init();  
  19.     EALLOW;  
  20.     PieVectTable.SCIRXINTC = &uartIsr;  
  21.     PieVectTable.SCITXINTC = &uart_send;  
  22.     EDIS;  
  23.     PieCtrlRegs.PIECTRL.bit.ENPIE=1;  
  24.     PieCtrlRegs.PIEIER8.bit.INTx5=1;  
  25.     PieCtrlRegs.PIEIER8.bit.INTx6=1;  
  26.     IER|=M_INT8;  
  27.     EINT;  
  28.     ERTM;     
  29.     while(1);  
  30. }  
  31.     void sci_init(void)  
  32.     {  
  33.         EALLOW;  
  34.         ScicRegs.SCICCR.all =0x0007;  
  35.         ScicRegs.SCICTL1.all =0x0003;  
  36.     //  ScicRegs.SCICTL2.all =0x0003;  
  37.         ScicRegs.SCICTL2.bit.TXINTENA=1;  
  38.         ScicRegs.SCICTL2.bit.RXBKINTENA=1;  
  39.          ScicRegs.SCIHBAUD    =0x0001;  
  40.          ScicRegs.SCILBAUD    =0x0086;  
  41.         ScicRegs.SCICTL1.bit.SWRESET=1;  
  42.         EDIS;  
  43.     }  
  44.     void uart_send(void)  
  45.     {     
  46.         PieCtrlRegs.PIEACK.all=0x0080;  
  47.     }  
  48.     void uartIsr(void)  
  49.     {  
  50.         m=ScicRegs.SCIRXBUF.all;  
  51.         ScicRegs.SCITXBUF=m;  
  52.         PieCtrlRegs.PIEACK.all=0x0080;        
  53.     }  
注意这里修改了一个中断服务函数的地址,一开始我没有使用interrupt,结果就悲剧了,一定要使用这个哦,就是上面声明的时候要加上。然后就是清除应答ack。开启中断我总结了要开5个:1.外设中断(如串口要使用的话,开好自己的中断,一般在外设初始化中开启,从上面也可以看出。)2.PIE中对应的外设中断,见上面的INTx.5,3.PIE的总开关ENPIE,4.CPU级中断 IER,对应的PIE中某一组开关,如上面的IER|=M_INT8,5.总开关EINT

4.测试结果:


虽然简单,也忙活了一下,记录下来,勿在犯错!

//工程,注意改一下波特率哦。

sci.rar




关键词: dsp--28335     sci     fifo    

院士
2014-09-30 09:02:02     打赏
2楼
南盗开始发力了,这帖子珍惜怒错

院士
2014-11-16 16:36:56     打赏
3楼
嘿嘿,DSP没有封装好的函数库啊!

菜鸟
2014-11-17 21:01:01     打赏
4楼
不错不错,楼主加油啊

菜鸟
2014-11-28 19:52:32     打赏
5楼
不错不错,亮点在于启动过程

菜鸟
2015-04-26 20:23:14     打赏
6楼
呵呵,顶一个,调了好几天SCI了……

高工
2020-05-07 16:16:42     打赏
7楼

感谢楼主分享


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]