在创龙的6655开发板上利用GPIO23中断来测试DPRAM(地址偏移:0x000-0x3FEF)的读写,GPIO23中断事件连续触发14347次,6655都可以进入中断服务函数读取数据,第14348次触发后边进不了中断服务函数了。请问原因可能是什么?利用GPIO0、GPIO17和GPIO19来测试的时候,6655都可以依次读完DPRAM的0x000-0x3FEF的地址空间。
说明:
(1)在DPRAM里设计0x3FF0-0x3FFF的地址作为中断触发地址,通过DSP6713往这些地址写数来拉低6655相应管脚的电平。其中地址0x3FF6作为触发6655GPIO23中断的地址。其中检测到第14348次,6713已经拉低了GPIO23管脚电平,表示中断已经产生,但6655并没有进入相应的GPIO23中断服务函数。
(2)将GPIO23中断事件映射到6655的可屏蔽中断7上。
(3)有没有可能是cmd文件的原因?如堆栈的设置。但是我自己写程序里都没有使用#pragma这个指令。
cmd代码如下:
-heap 0x800
-stack 0x1000
MEMORY
{
/* Local L2, 1MB*/
VECTORS: o = 0x00800000 l = 0x00000200
LL2_RW_DATA: o = 0x00800200 l = 0x0003FE00
/* Shared L2 1MB for C6657*/
SL2: o = 0x0C000000 l = 0x00100000
/* External DDR3, upto 2GB per core */
DDR3_CODE: o = 0x80000000 l = 0x01000000 /*set memory protection attribitue as execution only*/
DDR3_R_DATA: o = 0x81000000 l = 0x01000000 /*set memory protection attribitue as read only*/
DDR3_RW_DATA: o = 0x82000000 l = 0x06000000 /*set memory protection attribitue as read/write*/
}
SECTIONS
{
vecs > VECTORS
.text > SL2
.cinit > SL2
.const > SL2
.switch > SL2
.stack > LL2_RW_DATA
GROUP
{
.neardata
.rodata
.bss
} > LL2_RW_DATA
.far > LL2_RW_DATA
.fardata > LL2_RW_DATA
.cio > LL2_RW_DATA
.sysmem > LL2_RW_DATA
}
gxushine:
附上相应的cmd文件。请多多指教。
Thomas Yang1:
回复 gxushine:
几个检查点:
1)在 新的GPIO event产生时,前面一次中断有没有响应处理完
2) GPIO 对应的COREPAC event有没有置位上
3)硬件时序上,出问题时 GPIO的管脚 拉高,拉低时 timing有没有满足spec的要求