2895|3

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

DSP5509a使用dma只能响应一次中断 [复制链接]

本帖最后由 dontium 于 2015-1-23 11:42 编辑

DSP使用dma传输数据,只能响应一次中断,第二次情况是:读取数据个数未达到1帧(4096个)就停止读取数据,然后不能达到中断条件 具体程序如下: #include #include #include #include #include #include #include #include <_csl_pgpio.h> #include #include "port5509Adma.h" #define N 4096 #pragma DATA_SECTION(databuffer,"dmaMem") unsigned int databuffer[4096],sj[4096]; #pragma DATA_SECTION(src,"shuju") unsigned int src[4096]; interrupt void dma1_int(); extern void VECSTART(void); PLL_Config myConfig = { } EMIF_Config emiffig = { } void init_dma1(unsigned int * src_data,unsigned int * dst_data) { unsigned long int temp; //此处为DMA传输设置,一帧4096个数据,从EMIF接口到daram,中断条件是完成一帧并且同步事件发生,同步事件为int1 *DMA_CCR1=0x4370; *DMA_GCR=0x0008; *DMA_GSCR=0x0001; *DMA_GTCR=0x0000; *DMA_CICR1=0x0008; *DMA_CSDP1=0x0209; *DMA_CEN1=0x1000; *DMA_CFN1=0x0001; *DMA_CSEI1=0x0000; *DMA_CSFI1=0x0000; *DMA_CDEI1=0x0000; *DMA_CDFI1=0x0000; *DMA_CSSA_L1=(unsigned int)(src_data)<<1; temp=((unsigned long int)(src_data))>>15; *DMA_CSSA_U1=(unsigned int)(temp); *DMA_CDSA_L1=(unsigned int)(dst_data)<<1; temp=((unsigned int)(dst_data))>>15; *DMA_CDSA_U1=(unsigned int)(temp); *DMA_CCR1=0x43f0; } main() { /*初始化CSL库*/ CSL_init(); /*EMIF为全EMIF接口*/ CHIP_RSET(XBSR,0x0a01); /*设置系统的运行速度为144MHz*/ PLL_config(&myConfig); EMIF_config(&emiffig); IRQ_globalDisable(); IRQ_setVecs((Uint32)(&VECSTART)); IRQ_clear(IRQ_EVT_DMAC1); IRQ_enable(IRQ_EVT_DMAC1); IRQ_plug(IRQ_EVT_DMAC1,&dma1_int); IRQ_globalEnable(); _PGPIO_pinEnable(GPIO_PIN6); _PGPIO_pinDirection(GPIO_PIN6,1); _PGPIO_pinWrite(GPIO_PIN6,1); delay(); _PGPIO_pinWrite(GPIO_PIN6,0); delay(); _PGPIO_pinWrite(GPIO_PIN6,1); delay(); init_dma1(src,databuffer); while(1); } interrupt void dma1_int() { }向量表: .sect ".vectors" *------------------------------------------------------------------------------ * Global symbols defined here and exported out of this file *------------------------------------------------------------------------------ .global _VECSTART *------------------------------------------------------------------------------ * Global symbols referenced in this file but defined somewhere else. * Remember that your interrupt service routines need to be referenced here. *------------------------------------------------------------------------------ .ref _c_int00 .ref _dma1_int .def nmi, int0, int1, int2, int3, int4, int5, int6 .def int7, int8,int10, int11, int12, int13 .def int14, int15, int16, int17, int18, int19, int20 .def int21, int22, int23, int24, int25, int26, int27 .def int28, int29 _VECSTART: .ivec _c_int00,c54x_stk nmi .ivec no_isr nop_16 int0 .ivec no_isr nop_16 int1 .ivec no_isr nop_16 int2 .ivec no_isr nop_16 int3 .ivec no_isr nop_16 int4 .ivec no_isr nop_16 int5 .ivec no_isr nop_16 int6 .ivec no_isr nop_16 int7 .ivec no_isr nop_16 int8 .ivec no_isr nop_16 dmac1 .ivec _dma1_int nop_16 int10 .ivec no_isr nop_16 int11 .ivec no_isr nop_16 int12 .ivec no_isr nop_16 int13 .ivec no_isr nop_16 int14 .ivec no_isr nop_16 int15 .ivec no_isr nop_16 int16 .ivec no_isr nop_16 int17 .ivec no_isr nop_16 int18 .ivec no_isr nop_16 int19 .ivec no_isr nop_16 int20 .ivec no_isr nop_16 int21 .ivec no_isr nop_16 int22 .ivec no_isr nop_16 int23 .ivec no_isr nop_16 int24 .ivec no_isr nop_16 int25 .ivec no_isr nop_16 int26 .ivec no_isr nop_16 int27 .ivec no_isr nop_16 int28 .ivec no_isr nop_16 int29 .ivec no_isr nop_16 *------------------------------------------------------------------------------ * This is a dummy interrupt service routine used to initialize the IST. *------------------------------------------------------------------------------ .text .def no_isr no_isr: b #no_isr

最新回复

本帖最后由 dontium 于 2015-1-23 11:42 编辑 楼主应该把DSP的型号标上去。 看包含的头文件,是5509 ?   详情 回复 发表于 2014-6-16 21:31
点赞 关注

回复
举报

1万

帖子

25

TA的资源

裸片初长成(高级)

沙发
 
本帖最后由 dontium 于 2015-1-23 11:42 编辑

楼主应该把DSP的型号标上去。 看包含的头文件,是5509 ?

点评

对啊。。不好意思忘掉了。。  详情 回复 发表于 2014-6-17 09:30
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
dontium 发表于 2014-6-16 21:31
楼主应该把DSP的型号标上去。

看包含的头文件,是5509 ?

对啊。。不好意思忘掉了。。
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

4
 
有人说是中断函数用IRQ挂的原因,是IRQ只能挂硬中断么?
如果把irq那几条注释掉,会直接一次中断都不能进入。
相当于向量表中挂的中断函数没起作用?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 8

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表