高级会员
- 积分
- 941
- 威望
- 460
- 贡献
- 289
- 兑换币
- 298
- 注册时间
- 2016-1-12
- 在线时间
- 96 小时
- 毕业学校
- 常州大学
|
之前我用的岱默的例程调试在上位机上显示出来还是不错的,但今天我用学长的程序改完之后在上位机上显示就变成。
就是采集的图像分成了四份(不是一副图像分成了四份,而是同一个图像在显示窗口显示了四份)在网上看说什么可能是场行中断的问题。我也不知道具体出在哪 刚改来改去都不行 只好来求助啦。
这是我的主程序
/***********/
void main(void)
{
uint8 i,j;
DisableInterrupts;
uart_init(UART0,115200);
delay();
CCD_INC();
set_vector_handler(PORTD_VECTORn,PORTD_IRQHandler);
set_vector_handler(DMA4_VECTORn,DMA_CH4_Handler);
//enable_irq (PORTD_IRQn);
disable_irq(PIT0_IRQn);
disable_irq(PIT1_IRQn);
gpio_init (PTE10, GPO,HIGH);
gpio_init (PTE12, GPO,HIGH);
EnableInterrupts;
while(1)
{
uart_putchar(UART0,0xff);
for(i=0;i<DATALINE;i++)
{
for(j=0;j<DATACOUNT;j++)
{
if(j%2==0)
{
if(ADdata[j]==0xff)
ADdata[j]--;
uart_putchar(UART0,ADdata[j]);
}
}
EnableInterrupts;
}
}
这是我的外部中断程序
/***************************/
void PORTD_IRQHandler(){
if(PORTD_ISFR & 0x2000) //PTD13触发中断,采集的行中断
{
PORTD_ISFR |= 0x2000; //写1清中断标志位
if(Sample_Flag==0)
{
return;
}
dma_portx2buff_init(DMA_CH4, (void *)&PTE_B0_IN, ADdata[0], PTD14, DMA_BYTE1, DATACOUNT, DMA_RISING);
if((LinCout%(480/DATALINE)==0)&&(LinADCout<DATALINE))
{
delay() ; //摄像头行中断改为下降沿触发,有效点前面有一段行消隐区,故需要一段延时消除消耗掉,该处的时间,程序里面的需要根据单片机的主频调整。
DMA_DADDR(DMA_CH4) = (uint32_t)ADdata[LinADCout] ; //数据存储地址变化
DMA_EN(DMA_CH4); //使能通道CHn 硬件请求 (这样才能继续触发DMA传输)
DMA_IRQ_EN(DMA_CH4) ; //允许DMA通道传输
//PTA16_OUT = ~PTA16_OUT ;
LinADCout ++ ;
}
LinCout++;
if(LinADCout==DATALINE)
{
LinADCout=0;
// DMA_DIS(DMA_CH4);
//DisableInterrupts;
DMA_Over_Flg = 1 ;
}
}
if(PORTD_ISFR & 0x8000) //PTD15触发中断,采集的场中断。
{
PORTD_ISFR |= 0x8000; //写1清中断标志位
//uart_putchar(UART0,LinCout>>8); //采样行数
//uart_putchar(UART0,LinCout); //采样行数
LinCout = 0 ;
LinADCout=0;
Sample_Flag=1;
port_init (PTD13, IRQ_FALLING | ALT1 | PULLUP );
PORTD_ISFR |= 0x2000; //写1清中断标志位
}
}
有人遇到过这种情况吗
还请大家分享下经验啊
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|