在线时间0 小时
UID425826
注册时间2013-4-9
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 302
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2013-5-16 10:26:26
|
显示全部楼层
RE:DMA 使用"Always on "source在PIT模式下
顶,继续求助,附代码:
void DMAinit(int chno,int sourceno)//,int irqno
{
SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK; //开通DMAMUX
//DMA_SERQ|=DMA_SERQ_SERQ(chno) ;//使能DMA硬件请求源 chno
DMAMUX_CHCFG(chno)=(DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(sourceno));//使能DMA通道chno,并与触发源sourceno联系
DMAMUX_CHCFG(chno)|=DMAMUX_CHCFG_TRIG_MASK;//使能周期中断触发功能
//enable_irq(irqno);//使能DMA传输结束中断
}
void DMAset(uint32 *source_addr,uint32 *destiny_address,char sbits,char dbits,char nbytes,char chno,uint16 majorinter )
{
uint8 i;
i =chno ;//DMA通道号
SIM_SCGC7 |= SIM_SCGC7_DMA_MASK; //开通DMA
DMA_SADDR(i) = (uint32)source_addr;//DMA源地址
DMA_DADDR(i) = (uint32)destiny_address;//DMA目的地址
DMA_NBYTES_MLNO(i) =2;//通道每传一次的数据长度 (内循环) nbytes
DMA_ATTR(i)= (DMA_ATTR_SSIZE(sbits)|DMA_ATTR_DSIZE(dbits)) ;//源、目数据大小、模式
DMA_SOFF(i) =0x2; //源传输完后下一次传输的地址偏移量:这里默认设置为2
DMA_DOFF(i)=0x0;//目标地址传完一次偏移量 :这里默认设置为0
DMA_SLAST(i) = 0; //通道结束传输后调整源地址到初始地址;
DMA_DLAST_SGA(i) = 0; //目标地址传输结束后地址调整到初始地址
DMA_CITER_ELINKNO(i) =DMA_CITER_ELINKNO_CITER( majorinter);//设置当前外循环次数
DMA_BITER_ELINKNO(i) = DMA_BITER_ELINKNO_BITER(majorinter);//设置开始外循环次数
DMA_CSR(i)|=DMA_CSR_BWC(3);//这里默认配置源传输每个数据间间隔8个周期(源地址与目的地址大小不一样时有用)
DMA_CSR(i)|=DMA_CSR_INTMAJOR_MASK;//开启传输结束中断(外循环结束)
//DMA_CSR(i)|=DMA_CSR_START_MASK;软件start位
DMA_SERQ|=DMA_SERQ_SERQ(chno) ;//使能DMA硬件请求源 chno
}
void pwmdmaset()
{
DMAinit(1,ftm0ch0_dmasc);//,DMA1intno
DMAset(pwmdata,(uint32)&FTM0_C0V,1,1,2,1,1);
}
各位帮忙看看DMA的设置有没问题? |
|