在线时间18 小时
UID269117
注册时间2017-3-22
NXP金币0
TA的每日心情 | 开心 2018-2-11 12:29 |
---|
签到天数: 6 天 连续签到: 1 天 [LV.2]偶尔看看I
中级会员
 
- 积分
- 211
- 最后登录
- 2018-11-21
|
首先UART0单独进行收发是正常的,然后加上DMA发送数据,结果上位机一直接收不到数据, DMA配置采用寄存器的形式写的:
E_FLG DmaInitMemToPer (unsigned char uc_DMAn,
unsigned char uc_DMAReSource,
void *pulSrcAddress,
void *pulDestAddress,
unsigned int ui_DMASize,
unsigned char uc_IntCon)
{
SIM->SCGC7 |= SIM_SCGC7_DMA_MASK; // 开启DMA门控时钟
SIM->SCGC6 |= SIM_SCGC6_DMAMUX_MASK; // 开启多路复用DMA时钟
DMAMUX0->CHCFG[uc_DMAn] = 0x00; // 禁止DMA
DMA0->DMA[uc_DMAn].SAR = (uint32_t)pulSrcAddress; // 源地址配置
DMA0->DMA[uc_DMAn].DAR = (uint32_t)pulDestAddress; // 目标地址
DMA0->DMA[uc_DMAn].DSR_BCR |= (DMA_DSR_BCR_DONE_MASK // 清除Done标志位
| DMA_DSR_BCR_BCR(ui_DMASize));// 传输数据量大小配置
DMA0->DMA[uc_DMAn].DCR |= (uc_IntCon << 31)
| DMA_DCR_SSIZE(1) // 源数据位8bit(00-32;01-8;10-16)
| DMA_DCR_DSIZE(1) // 目标地址8bit(00-32;01-8;10-16)
| DMA_DCR_SINC_MASK // 源地址自动增加
| DMA_DCR_CS_MASK // 单次传输
| DMA_DCR_ERQ_MASK // 外设请求配置
| (uc_IntCon << DMA_DCR_EINT_SHIFT); // 中断配置
DMAMUX0->CHCFG[uc_DMAn] |= DMAMUX_CHCFG_SOURCE(uc_DMAReSource); // 选择DMA请求源
if(DMA0->DMA[uc_DMAn].DSR_BCR & DMA_DSR_BCR_CE_MASK) // 出现错误
{
return FLG_FAIL;
}
else //配置正常
{
DMAMUX0->CHCFG[uc_DMAn] |= DMAMUX_CHCFG_ENBL_MASK; //DMAMUX使能
return FLG_SUCCESS;
}
}
调用的地方:
BSP_DMA_CTR.MemToPer(MKL_DMA0, 3, (uint8_t*)a, (uint8_t*)(UART0_BASE + 0x7), 10, 0);
// DMA0->DMA[0].DCR |= DMA_DCR_START_MASK;
UART0->C5 |= UART0_C5_TDMAE_MASK; //发送DMA使能
while((DMA0->DMA[0].DSR_BCR & DMA_DSR_BCR_DONE_MASK) != DMA_DSR_BCR_DONE_MASK);
结果是发送完成标志立马就置位完成的.
手册上也没查到串口0对应的DMA通道应该是0-3中 的几(0和1都测试过没用)
最佳答案
楼主你好,请问问题的时候告知我们你使用的芯片型号,这样才好帮你对应查看。
|
|