金牌会员
- 积分
- 1087
- 威望
- 546
- 贡献
- 273
- 兑换币
- 336
- 注册时间
- 2015-1-9
- 在线时间
- 134 小时
|
1贡献
void dma_init()
{
SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用器时钟
SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟
DMAMUX_CHCFG0=DMAMUX_CHCFG_SOURCE(50);//DMA通道0对应50号DMA请求,即PORTB
DMA_TCD0_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(157);//当前主循环次数,采集点数
DMA_TCD0_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(157);//起始主循环次数,采集点数
DMA_TCD0_SADDR=(uint32)&GPIOE_PDIR; //设置源地址GPIO口,PORTB
DMA_TCD0_SOFF=0; //每次传送源地址不变
DMA_TCD0_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节
DMA_TCD0_SLAST=0;//主循环结束后源地址0回写tcd
DMA_TCD0_DLASTSGA=0;//主循环结束后目的地址0回写tcd
DMA_TCD0_DADDR=(uint32)Image_Original;//设置目的地址,video数组第一个元素
DMA_TCD0_DOFF=1;//每次写目的地址加1
DMA_TCD0_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据宽度8bit,目的数据宽度8bit
DMA_TCD0_CSR=DMA_CSR_DREQ_MASK;//DMA通道0主循环结束后停止硬件请求
DMA_TCD0_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA0中断
DMAMUX_CHCFG0|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道0使能
DMA_ERQ&=~DMA_ERQ_ERQ5_MASK ;//The DMA request signal for the corresponding channel is enabled
}
void DMA0_isr(void)//DMA0中断服务函数
{
DMA_INT|=DMA_INT_INT0_MASK; //清除通道0中断
Sample_point++;
}
////////////////////////////////////////////////////////////
// 中断服务函数,场中断为PTA181的IO中断;
// 等待改为输入捕捉
//
///////////////////////////////////////////////////////////
void PORTA_isr(void)//场中断PTB21 中断号87
{
if(send_F==1)
{
send_F=0;
PORTA_PCR14 |= PORT_PCR_ISF_MASK; //清标志位
Sample_point=SampleRow;//赋地址指针
enable_irq(0); //使能DMA完成中断
enable_irq(88); //使能行中断
}
}
/////////////////////////////////////////////////////////////
//
//行中断,PTB22
//
///////////////////////////////////////////////////////////
void PORTB_isr(void)//行中断PB22 中断号88
{
static uint16 ui_SampleRow=0; //采集的行数
PORTB_PCR22 |= PORT_PCR_ISF_MASK;//清行中断标志位;
if(ui_SampleRow==*Sample_point) //判断是否为采集的行
{
DMA_ERQ|=DMA_ERQ_ERQ0_MASK;//使能通道0硬件DMA请求
}
ui_SampleRow++;//行计数
if(ui_SampleRow>=160)
{
uc_ImageOver=1;
ui_SampleRow=0; //清采集图像上行
disable_irq(88); //关行中断
uc_ImageOver=0;
send_F=1;
}
}
|
|