- 打卡等级:初来乍到
- 打卡总天数:6
- 最近打卡:2025-02-15 22:45:37
高级会员
- 积分
- 604
|
发表于 2024-9-5 16:29:49
|
显示全部楼层
请问数据是如何复制进DMA缓冲区的,一直没有看明白,下面是自己的应用
unsigned char xdata TX3_485_DATA[22];
unsigned char xdata RX3_485_DATA[22];
/*--------------------------------------------
初始化串口3DMA,只使能DMA发送,不使能DMA接收
--------------------------------------------*/
void DMA_UART3_Init(void)
{
DMA_UR3T_STA = 0x00; //清除标志
DMA_UR3T_CFG = 0x8A; //允许DMA中断, 中断Priority_2优先级,传输Priority_2优先级
DMA_UR3R_CFG = 0x00; //关闭接收DMA
}
/*--------------------------------------------
串口3 DMA发送
Led:数据长度 最大不大于20
TX3_485_EN:485发送使能
--------------------------------------------*/
void DMA_TX3_DATA(unsigned char Len)//发送数据
{
DMA_UR3T_AMT = 0x15; //设置传输总字节数(低8位):n+1 共20个数据
DMA_UR3T_AMTH = 0x00; //设置传输总字节数(高8位):n+1
//将TX3_485_DATA[20]内的数据复制至发送缓冲区 如何复制?
TX3_485_EN = 1;//开启485发送使能
DMA_UR3T_CR = 0XC0; //启动DMA 开始发送数据
}
/*----------------------------
UART3 DMA TX 中断服务程序
-----------------------------*/
void DMA_UR3T() interrupt 54 //串口3 DMA TX中断
{
if (DMA_UR3T_STA & 0x01) //发送完成
{
DMA_UR3T_STA &= ~0x01;
DmaTxFlag = 1;
TX3_485_EN = 1;//关闭485发送使能
}
if (DMA_UR3T_STA & 0x04) //数据覆盖
{
DMA_UR3T_STA &= ~0x04;
}
} |
|