完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
[tr]我现在用的开发板是c6748EVM A3,我在跑RS485例程的时候,可以直接输出程序中储存的字符串,但是当我从PC发送数据时,只有在调试状态单步进行并且只发送单个字符的时候串口终端才会有回显。另外我将485为改写为UART1中断触发,在中断服务函数设断点单步调试的时候可以进入中断,并打出一个字符,不设断点的话,无输出。程序用UART1的232串口是没有问题的,485就不行了,下面给程序。
/****************************************************************************/ /* */ /* 广州创龙电子科技有限公司 */ /* */ /* Copyright 2014 Tronlong All rights reserved */ /* RS485 串口测试 */ /* 2014年07月12日 */ /****************************************************************************/ #include "TL6748.h" // 创龙 DSP6748 开发板相关声明 #include "hw_types.h" // 宏命令 #include "hw_syscfg0_C6748.h" // 系统配置模块寄存器 #include "soc_C6748.h" // DSP C6748 外设寄存器 #include "psc.h" // 电源与睡眠控制宏及设备抽象层函数声明 #include "gpio.h" // 通用输入输出口宏及设备抽象层函数声明 #include "uart.h" // 通用异步串口宏及设备抽象层函数声明 #include "uartStdio.h" // 串口标准输入输出终端函数声明 #include "interrupt.h" // DSP C6748 中断相关应用程序接口函数声明及系统事件号定义 #include /* 宏定义 */ // 时钟 #define SYSCLK_1_FREQ (456000000) #define SYSCLK_2_FREQ (SYSCLK_1_FREQ/2) #define UART_1_FREQ (SYSCLK_2_FREQ) /* 全局变量 */ char txArray[] = "Tronglong RS485 Testing ......nr"; // 发送缓存 char Send[] = "Tronglong RS485 Testing ......nr"; // 接收缓存 unsigned char Receive; /****************************************************************************/ /* */ /* 延时函数 */ /* */ /****************************************************************************/ static void Delay (int length) { while (length > 0) length--; } /****************************************************************************/ /* */ /* PSC 初始化 */ /* */ /****************************************************************************/ void PSCInit(void) { // 使能 GPIO 模块 // 对相应外设模块的使能也可以在 BootLoader 中完成 PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_GPIO, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); // 使能 UART1 模块 PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON,PSC_MDCTL_NEXT_ENABLE); } /****************************************************************************/ /* */ /* GPIO 管脚复用配置 */ /* */ /****************************************************************************/ void GPIOBankPinMuxSet(void) { // 使能 UART1 禁用流控 UARTPinMuxSetup(1, FALSE); // RS485 Enable 管脚 RS485PinMuxSetup(); } /****************************************************************************/ /* */ /* UART 初始化 */ /* */ /****************************************************************************/ void UARTInit(void) { // 配置 UART1 参数 // 波特率 115200 数据位 8 停止位 1 无校验位 UARTConfigSetExpClk(SOC_UART_1_REGS, UART_1_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16); // 使能 UART1 UARTEnable(SOC_UART_1_REGS); // 使能接收 / 发送 FIFO UARTFIFOEnable(SOC_UART_1_REGS); // 设置 FIFO 级别 UARTFIFOLevelSet(SOC_UART_1_REGS, UART_RX_TRIG_LEVEL_1); // 设置使能管脚为输出状态 GPIO0[11] GPIODirModeSet(SOC_GPIO_0_REGS, 12, GPIO_DIR_OUTPUT); } /****************************************************************************/ /* */ /* UART 中断服务函数 */ /* */ /****************************************************************************/ unsigned char rxData = 0; static void UARTIsr() { static char RS485Send[] = "rn============Test Start===========.rnUnderwater communicate by DPSK.rn"; static unsigned int length = sizeof(RS485Send); static unsigned int count = 0; unsigned int int_id = 0; // 确定中断源 int_id = UARTIntStatus(SOC_UART_1_REGS); // 清除 UART2 系统中断 IntEventClear(SYS_INT_UART1_INT); // 发送中断 if(int_id == UART_INTID_TX_EMPTY) { if(length > 0) { // 写一个字节到 THR UARTCharPutNonBlocking(SOC_UART_1_REGS, RS485Send[count]); length--; count++; } if(length == 0) { // 禁用发送中断 UARTIntDisable(SOC_UART_1_REGS, UART_INT_TX_EMPTY); } } // 接收中断 if(int_id == UART_INTID_RX_DATA) { rxData=UARTCharGetNonBlocking(SOC_UART_1_REGS); // 使能发送 GPIOPinWrite(SOC_GPIO_0_REGS, 12, GPIO_PIN_HIGH); Delay(200); UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData); // 关闭发送,使能接收 GPIOPinWrite(SOC_GPIO_0_REGS, 12, GPIO_PIN_LOW); } // 接收错误 if(int_id == UART_INTID_RX_LINE_STAT) { while(UARTRxErrorGet(SOC_UART_1_REGS)) { // 从 RBR 读一个字节 UARTCharGetNonBlocking(SOC_UART_1_REGS); } } return; } /****************************************************************************/ /* */ /* UART2 中断初始化 */ /* */ /****************************************************************************/ static void UARTInterruptInit(void) { // 注册中断函数 IntRegister(C674X_MASK_INT5, UARTIsr); // UART2中断映射 IntEventMap(C674X_MASK_INT5, SYS_INT_UART1_INT); // 使能可屏蔽中断5 IntEnable(C674X_MASK_INT5); // 使能中断 unsigned int intFlags = 0; intFlags |= (UART_INT_LINE_STAT | UART_INT_RXDATA_CTI); // UART_INT_TX_EMPTY | UARTIntEnable(SOC_UART_1_REGS, intFlags); } /****************************************************************************/ /* */ /* DSP 中断初始化 */ /* */ /****************************************************************************/ void InterruptInit(void) { // 初始化 DSP 中断控制器 IntDSPINTCInit(); // 使能 DSP 全局中断 IntGlobalEnable(); } /****************************************************************************/ /* */ /* 主函数 */ /* */ /****************************************************************************/ //F:CRABRecentWorkDSPdemoStarterWareApplicationRS485DebugRS485.ais int main(void) { // 外设使能配置 PSCInit(); // GPIO 管脚复用配置 GPIOBankPinMuxSet(); // DSP 中断初始化 InterruptInit(); // UART 初始化 UARTInit(); // UART 中断初始化 UARTInterruptInit(); // 发送字符串 // 使能发送 GPIOPinWrite(SOC_GPIO_0_REGS, 12, GPIO_PIN_HIGH); unsigned char i; for(i = 0; i < 34; i++) UARTCharPut(SOC_UART_1_REGS, Send [/tr] |
|
相关推荐
2个回答
|
|
485 是半双工的 默认处于接收状态 需要发送的时候才切换到发送状态
// 使能发送 GPIOPinWrite(SOC_GPIO_0_REGS, 12, GPIO_PIN_HIGH); Delay(200); UARTCharPutNonBlocking(SOC_UART_1_REGS, rxData); // 关闭发送,使能接收 GPIOPinWrite(SOC_GPIO_0_REGS, 12, GPIO_PIN_LOW); 接收中断做这些是很耗时间的 而且也不能这样做 会导致丢失数据 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
基于RK3588J的6路MIPI CSI视频采集案例分享,多路视频系统必看!
1341 浏览 0 评论
628 浏览 0 评论
【创龙科技TL570x-EVM开发板试用体验】 GStreamer 功能测评
8627 浏览 8 评论
【创龙科技TL570x-EVM开发板试用体验】创龙TL5708-EVM开发板入手使用体验评测
6675 浏览 0 评论
【创龙TLZ7x-EasyEVM评估板试用连载】+3.环境搭建vmware+ubuntu详细教程(二)
1418 浏览 0 评论
913浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板及核心板介绍
870浏览 0评论
【创龙科技AM64x开发板试用体验】创龙科技AM64x开发板--板卡调试软件安装
888浏览 0评论
【创龙科技AM64x开发板试用体验】AM64x开发板开箱测评
882浏览 0评论
求助! 关于使用自制底板插入创龙IMX8MM 核心板无法启动问题
511浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 19:16 , Processed in 0.635517 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号