金牌会员
- 积分
- 1423
- 威望
- 761
- 贡献
- 402
- 兑换币
- 439
- 注册时间
- 2013-10-23
- 在线时间
- 130 小时
- 毕业学校
- TANKER
|
我的是摄像头采集,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,不知道是不是配置上的问题。求火哥帮忙看一下 |
|