DSP5509的中断学习-第4篇
1. 编译工程的时候出现一个问题,如下
1 specifies large memory model, which is not compatible with small memory
2. 修改工程设置如下,编译通过,好像是大小端的设置。
3. 代码如下,代码很简单,每次按键的时候,打印一句话,测试一下,疑问,怎么把引脚和中断对应起来的?
1 void INTconfig() 2 { 3 /* Temporarily disable all maskable interrupts */ 4 5 IRQ_setVecs((Uint32)(&VECSTART)); 6 7 /* Temporarily disable all maskable interrupts */ 8 9 old_intm = IRQ_globalDisable(); 10 11 /* Get Event Id associated with External INT1(8019), for use with */ 12 eventId0 = IRQ_EVT_INT0; 13 14 /* Clear any pending INT1 interrupts */ 15 16 IRQ_clear(eventId0); 17 18 /* Place interrupt service routine address at */ 19 20 /* associated vector location */ 21 22 IRQ_plug(eventId0,&int1); 23 24 /* Enable INT1(8019) interrupt */ 25 26 IRQ_enable(eventId0); 27 28 /* Enable all maskable interrupts */ 29 30 IRQ_globalEnable(); 31 } 32 33 main() 34 { 35 /*初始化CSL库*/ 36 CSL_init(); 37 38 /*EMIF为全EMIF接口*/ 39 CHIP_RSET(XBSR,0x0a01); 40 41 /*设置系统的运行速度为144MHz*/ 42 PLL_config(&myConfig); 43 44 //设置并使能5509A芯片的INT0中断(EXINT中断) 45 INTconfig(); 46 47 while(1); 48 } 49 50 //External INT0(EXINT)中断处理函数 51 interrupt void int1() 52 { 53 printf("EXINT ouccers\n"); 54 }
4. 看下按键引脚,看出来DSP是有专门的中断引脚,感觉没有STM32吊,STM32的普通GPIO都可以做中断引脚的啊。
5. 实际测试,发现指针跑飞了,下载完.out文件之后,指针指向这里,原因暂时不清楚,估计要研究研究了
6. VC5509A上电之后,首先从0xffff00处执行指令 .ivec 0xff8000,程序转入这里之后,0xff8000存放的是芯片内部固化的bootloader,bootloader根据外部引脚的高低电平选择启动模式。
突然出现一个问题,点击connecet连接目标板,CCS就自动关掉了。
之后开始进入C程序中断向量表,启动_c_int00函数,这个函数是在rts库里面的。
1 _VECSTART: 2 3 .ivec _c_int00,c54x_stk
7. 看下VC5509A的内存空间,DRAM在8000-10000的空间
对比下CMD文件,下面的好像是字地址,上面的是字节地址,所以需要乘以2,也就是说程序是直接放到RAM里面运行的,掉电会丢失的
1 MEMORY 2 { 3 PAGE 0: 4 PROG0(RWX) : origin = 04000h length = 08000h 5 P_VECT(RIX) : origin = 00200h length = 00100h 6 PAGE 1: 7 DATA0(RW) : origin = 0C000h length = 04000h 8 }
8.