智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2024|回复: 0
打印 上一主题 下一主题

野火大哥,求助,DMA的问题

[复制链接]

38

主题

114

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1423
威望
761
贡献
402
兑换币
439
注册时间
2013-10-23
在线时间
130 小时
毕业学校
TANKER
跳转到指定楼层
1#
发表于 2014-6-29 21:14:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的是摄像头采集,PCLK是PTC6,VSYN是PTC10,HREF是PTC11,数据输入端是PTB16-23.用的是kl26,野火的库。
DMA的配置如下:   
    port_init(PTC6,DMA_RISING |PULLDOWN |ALT1);
    dma_portx2buff_init(DMA_CH0,(void *)&PTB_B2_IN,(void *)Image_Data,PTC6, DMA_BYTE1,Image_Column);
    DMA_EN(DMA_CH0);                    //DMA must be enabled before it starts to work
行中断场中断脚的配置如下:
    port_init(H_isrPin,IRQ_RISING |PULLDOWN   |ALT1);
    port_init(V_isrPin,IRQ_RISING |PULLDOWN   |ALT1);
    set_vector_handler(PORTC_PORTD_VECTORn,portc_handler);               //interrupt service function
数据输入脚配置如下:
    port_init(PTB16,ALT1 |PULLDOWN);              //enable PTB16-23 as  GPIO
    port_init(PTB17,ALT1 |PULLDOWN);
    port_init(PTB18,ALT1 |PULLDOWN);
    port_init(PTB19,ALT1 |PULLDOWN);
    port_init(PTB20,ALT1 |PULLDOWN);
    port_init(PTB21,ALT1 |PULLDOWN);
    port_init(PTB22,ALT1 |PULLDOWN);
    port_init(PTB23,ALT1 |PULLDOWN);

    gpio_init(PTB16,GPI,0);             //initiate gpio
    gpio_init(PTB17,GPI,0);
    gpio_init(PTB18,GPI,0);
    gpio_init(PTB19,GPI,0);
    gpio_init(PTB20,GPI,0);
    gpio_init(PTB21,GPI,0);
    gpio_init(PTB22,GPI,0);
    gpio_init(PTB23,GPI,0);
行中断、场中断服务函数如下:
void portc_handler()
{

    if(PORTC_ISFR & (1 << H_isrPinNum))           //make sure the H interrupt occurs
    {
        PORTC_ISFR  = (1 << H_isrPinNum);        //write 1 to clear the flag
        if(!Image_Row_Cnt) Image_Field_Over = 0;
        if(Image_Row_Cnt<(Image_Row-1))
        {

            DMA_EN(DMA_CH0);                    //DMA must be enabled before it starts to work
            Image_Row_Cnt++;
        }
        else
        {
            Image_Field_Over = 1;
        }
    }
    if(PORTC_ISFR & (1<< V_isrPinNum))           //make sure V interrupt occurs
    {
        PORTC_ISFR  = (1 << V_isrPinNum);        //write 1 to clear the flag
        dma_repeat(DMA_CH0,(void *)&PTB_B2_IN, (void *)Image_Data,Image_Column);
        Image_Row_Cnt=0;
    }
}


不使用DMA传输完成中断。
在主函数中:
初始化PCLK、VSYN、HREF脚,打开中断,打开DMA。
现在可以进入中断,可以将一幅图给扫描下来,但是得到的数据全是0,不知道是不是配置上的问题。求火哥帮忙看一下
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-19 14:11 , Processed in 0.038991 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表