专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TM4C123 DMA串口接收求教
2019-03-23 22:16
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
4254
2
1794
用串口接收SBUS信号 只用中断的情况下已经试过接收SBUS了 但是100000的波特率用串口中断接收太占用CPU了 导致了一些任务不能执行
下面是DMA代码 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
627933142
1楼-- · 2019-03-24 05:40
< int main()
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_8MHZ);
/*UART2 INIT*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
GPIOPinConfigure(GPIO_PD7_U2TX);
GPIOPinConfigure(GPIO_PD6_U2RX);
GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_7|GPIO_PIN_6);
UARTConfigSetExpClk(UART2_BASE,SysCtlClockGet(),115200,UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
UARTEnable(UART2_BASE);
/*UART4 INIT*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);
GPIOPinConfigure(GPIO_PC4_U4RX);
GPIOPinTypeUART(GPIO_PORTC_BASE,GPIO_PIN_4);
UARTFIFOLevelSet(UART4_BASE,UART_FIFO_TX4_8,UART_FIFO_RX4_8);
UARTConfigSetExpClk(UART4_BASE,SysCtlClockGet(),100000,
UART_CONFIG_WLEN_8|UART_CONFIG_STOP_TWO|UART_CONFIG_PAR_EVEN);
/* DMA */
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(DMAControlTable);
uDMAChannelAssign(UDMA_CH18_UART4RX);
uDMAChannelAttributeDisable(UDMA_CH18_UART4RX,
UDMA_ATTR_USEBURST|
UDMA_ATTR_HIGH_PRIORITY|
UDMA_ATTR_ALTSELECT|
UDMA_ATTR_REQMASK);
uDMAChannelAttributeEnable(UDMA_CH18_UART4RX,UDMA_ATTR_ALTSELECT);
uDMAChannelControlSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_SIZE_8|
UDMA_SRC_INC_NONE|
UDMA_DST_INC_NONE|
UDMA_ARB_8);
uDMAChannelControlSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_SIZE_8|UDMA_SRC_INC_NONE|
UDMA_DST_INC_NONE|UDMA_ARB_8);
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataA,13);
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataB,12);
uDMAChannelEnable(UDMA_CH18_UART4RX);
IntMasterEnable();
UARTDMAEnable(UART4_BASE,UART_DMA_RX);
UARTEnable(UART4_BASE);
IntEnable(INT_UART4);
UARTIntEnable(UART4_BASE,UART_INT_RX);
while(1)
{
data_send(remote_dataA,13);
data_send(remote_dataB,12);
data_send(remote_data,25);
}
}
/* UART IRQ */
void UART4_Handler(void)
{
uint32_t status,mode;
status=UARTIntStatus(UART4_BASE,true);
UARTIntClear(UART4_BASE,status);
mode=uDMAChannelModeGet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT);
if(mode==UDMA_MODE_STOP)
{
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataA,13);
}
mode=uDMAChannelModeGet(UDMA_CH18_UART4RX|UDMA_ALT_SELECT);
if(mode==UDMA_MODE_STOP)
{
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataB,12);
}
uDMAChannelEnable(UDMA_CH18_UART4RX);
for(uint8_t j=0;j<13;j++)
{
remote_data[j]=remote_dataA[j];
}
for(uint8_t k=14;k<26;k++)
{
remote_data[k]=remote_dataB[k-14];
}
}
加载中...
627933142
2楼-- · 2019-03-24 07:18
精彩回答 2 元偷偷看……
加载中...
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
{
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_8MHZ);
/*UART2 INIT*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
GPIOPinConfigure(GPIO_PD7_U2TX);
GPIOPinConfigure(GPIO_PD6_U2RX);
GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_7|GPIO_PIN_6);
UARTConfigSetExpClk(UART2_BASE,SysCtlClockGet(),115200,UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
UARTEnable(UART2_BASE);
/*UART4 INIT*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART4);
GPIOPinConfigure(GPIO_PC4_U4RX);
GPIOPinTypeUART(GPIO_PORTC_BASE,GPIO_PIN_4);
UARTFIFOLevelSet(UART4_BASE,UART_FIFO_TX4_8,UART_FIFO_RX4_8);
UARTConfigSetExpClk(UART4_BASE,SysCtlClockGet(),100000,
UART_CONFIG_WLEN_8|UART_CONFIG_STOP_TWO|UART_CONFIG_PAR_EVEN);
/* DMA */
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(DMAControlTable);
uDMAChannelAssign(UDMA_CH18_UART4RX);
uDMAChannelAttributeDisable(UDMA_CH18_UART4RX,
UDMA_ATTR_USEBURST|
UDMA_ATTR_HIGH_PRIORITY|
UDMA_ATTR_ALTSELECT|
UDMA_ATTR_REQMASK);
uDMAChannelAttributeEnable(UDMA_CH18_UART4RX,UDMA_ATTR_ALTSELECT);
uDMAChannelControlSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_SIZE_8|
UDMA_SRC_INC_NONE|
UDMA_DST_INC_NONE|
UDMA_ARB_8);
uDMAChannelControlSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_SIZE_8|UDMA_SRC_INC_NONE|
UDMA_DST_INC_NONE|UDMA_ARB_8);
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataA,13);
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataB,12);
uDMAChannelEnable(UDMA_CH18_UART4RX);
IntMasterEnable();
UARTDMAEnable(UART4_BASE,UART_DMA_RX);
UARTEnable(UART4_BASE);
IntEnable(INT_UART4);
UARTIntEnable(UART4_BASE,UART_INT_RX);
while(1)
{
data_send(remote_dataA,13);
data_send(remote_dataB,12);
data_send(remote_data,25);
}
}
/* UART IRQ */
void UART4_Handler(void)
{
uint32_t status,mode;
status=UARTIntStatus(UART4_BASE,true);
UARTIntClear(UART4_BASE,status);
mode=uDMAChannelModeGet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT);
if(mode==UDMA_MODE_STOP)
{
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataA,13);
}
mode=uDMAChannelModeGet(UDMA_CH18_UART4RX|UDMA_ALT_SELECT);
if(mode==UDMA_MODE_STOP)
{
uDMAChannelTransferSet(UDMA_CH18_UART4RX|UDMA_PRI_SELECT,
UDMA_MODE_PINGPONG,
(void*)(UART4_BASE+UART_O_DR),
remote_dataB,12);
}
uDMAChannelEnable(UDMA_CH18_UART4RX);
for(uint8_t j=0;j<13;j++)
{
remote_data[j]=remote_dataA[j];
}
for(uint8_t k=14;k<26;k++)
{
remote_data[k]=remote_dataB[k-14];
}
}
一周热门 更多>