DM368串口通信调试
我们知道DM368有两个串口,UART0和UART1。但是UART0默认为调试串口,也就是说一般不用这个作为通信串口,此刻UART1就成为了DM368和上位机通信的唯一选择。
官方文档表明,UART0和UART1都已经配置好了,并且不需要修改任何代码就可以直接使用,但是实际操作过程中,保证通信程序完全没有问题的情况下,并不能完成通信。这就让我不得不怀疑,UART1是不是确确实实的使能了?到底是可以收到数据而不能发送数据?还是可以发送数据不能接收数据?于是,我在硬件工程师(项目组里面另一个资深工程师,我就是一个菜鸟)的指导下,开始从IO管脚寻找问题所在
我使用的平台:
Ubuntu10.04 + ti-dvsdk_dm368-evm_4_02_00_06 + dm368_EVM
调试过程中使用的文件:
1.TMS320DM36x Digital Media System-on-Chip(DMSoC) ARM Subsystem.pdf
2. ti-dvsdk_dm368-evm_4_02_00_06/psp/linux-2.6.32.17-psp03.01.01.39/arch/arm/mach-davinci/dm365.c
3. ti-dvsdk_dm368-evm_4_02_00_06/psp/linux-2.6.32.17-psp03.01.01.39/arch/arm/mach-davinci/board-dm365-evm.c
具体操作:
1 . 查看上述PDF文件,搜索PINMUX3。这里的PINMUX代表管脚复用意思,dm368里面一共有4个管脚复用设置寄存器。但是,我们只需要修改PINMUX3这个寄存器即可。想必现在大家已经猜到了,UART1通信失败的原因了,其实就是管脚复用没有设置,导致UART1所用的引脚处于其他功能之下。
我们可以明显的看到,UART0和1都在这个寄存器设置。红色的框框看一下有利于后面的设置。
2 . 在这个寄存器中寻找到UART1所使用的具体管脚。
IO口16-15管UART1的发送数据;IO口18-17管UART1的接受数据。同时第三列代表PINMUX3的这一位需要设置的值。两个value都必须设置为2.
3.接下来就是在dm356.c文件里面修改我们刚刚寻找到的值。
大概在483行左右的位置,我们可以发现如下代码:
static const struct mux_config dm365_pins[] = {
#ifdef CONFIG_DAVINCI_MUX
MUX_CFG(DM365, MMCSD0, 0, 24, 1, 0, false)
MUX_CFG(DM365, SD1_CLK, 0, 16, 3, 1, false)
MUX_CFG(DM365, SD1_CMD, 4, 30, 3, 1, false)
MUX_CFG(DM365, SD1_DATA3, 4, 28, 3, 1, false)
MUX_CFG(DM365, SD1_DATA2, 4, 26, 3, 1, false)
MUX_CFG(DM365, SD1_DATA1, 4, 24, 3, 1, false)
MUX_CFG(DM365, SD1_DATA0, 4, 22, 3, 1, false)
MUX_CFG(DM365, I2C_SDA, 3, 23, 3, 2, false)
MUX_CFG(DM365, I2C_SCL, 3, 21, 3, 2, false)
MUX_CFG(DM365, AEMIF_AR, 2, 0, 3, 1, false)
MUX_CFG(DM365, AEMIF_A3, 2, 2, 3, 1, false)
MUX_CFG(DM365, AEMIF_A7, 2, 4, 3, 1, false)
MUX_CFG(DM365, AEMIF_D15_8, 2, 6, 1, 1, false)
MUX_CFG(DM365, AEMIF_CE0, 2, 7, 1, 0, false)
MUX_CFG(DM365, MCBSP0_BDX, 0, 23, 1, 1, false)
MUX_CFG(DM365, MCBSP0_X, 0, 22, 1, 1, false)
MUX_CFG(DM365, MCBSP0_BFSX, 0, 21, 1, 1, false)
MUX_CFG(DM365, MCBSP0_BDR, 0, 20, 1, 1, false)
MUX_CFG(DM365, MCBSP0_R, 0, 19, 1, 1, false)
MUX_CFG(DM365, MCBSP0_BFSR, 0, 18, 1, 1, false)
MUX_CFG(DM365, SPI0_SCLK, 3, 28, 1, 1, false)
MUX_CFG(DM365, SPI0_SDI, 3, 26, 3, 1, false)
MUX_CFG(DM365, SPI0_SDO, 3, 25, 1, 1, false)
MUX_CFG(DM365, SPI0_SDENA0, 3, 29, 3, 1, false)
MUX_CFG(DM365, SPI0_SDENA1, 3, 26, 3, 2, false)
MUX_CFG(DM365, UART0_RXD, 3, 20, 1, 1, false)
MUX_CFG(DM365, UART0_TXD, 3, 19, 1, 1, false)
//下面两行本来是红色背景的,网页上不能显示XXXXXX
MUX_CFG(DM365, UART1_RXD, 3, 17, 3, 2, false)
MUX_CFG(DM365, UART1_TXD, 3, 15, 3, 2, false)
//上面两行本来是红色背景的,网页上不能显示XXXXXXXXX
//MUX_CFG(DM365, UART1_TXD, 3, 15, 3, 2, false)
//MUX_CFG(DM365, UART1_RTS, 3, 23, 3, 1, false)
//MUX_CFG(DM365, UART1_CTS, 3, 21, 3, 1, false)
//MUX_CFG(DM365, EMAC_TX_EN, 3, 17, 3, 1, false)
//MUX_CFG(DM365, EMAC_TX_CLK, 3, 15, 3, 1, false)
MUX_CFG(DM365, EMAC_COL, 3, 14, 1, 1, false)
MUX_CFG(DM365, EMAC_TXD3, 3, 13, 1, 1, false)
MUX_CFG(DM365, EMAC_TXD2, 3, 12, 1, 1, false)
MUX_CFG(DM365, EMAC_TXD1, 3, 11, 1, 1, false)
MUX_CFG(DM365, EMAC_TXD0, 3, 10, 1, 1, false)
MUX_CFG(DM365, EMAC_RXD3, 3, 9, 1, 1, false)
MUX_CFG(DM365, EMAC_RXD2, 3, 8, 1, 1, false)
MUX_CFG(DM365, EMAC_RXD1, 3, 7, 1, 1, false)
MUX_CFG(DM365, EMAC_RXD0, 3, 6, 1, 1, false)
MUX_CFG(DM365, EMAC_RX_CLK, 3, 5, 1, 1, false)
MUX_CFG(DM365, EMAC_RX_DV, 3, 4, 1, 1, false)
MUX_CFG(DM365, EMAC_RX_ER, 3, 3, 1, 1, false)
MUX_CFG(DM365, EMAC_CRS, 3, 2, 1, 1, false)
MUX_CFG(DM365, EMAC_MDIO, 3, 1, 1, 1, false)
MUX_CFG(DM365, EMAC_MDCLK, 3, 0, 1, 1, false)
MUX_CFG(DM365, KEYSCAN, 2, 0, 0x3f, 0x3f, false)
MUX_CFG(DM365, PWM0, 1, 0, 3, 2, false)
MUX_CFG(DM365, PWM0_G23, 3, 26, 3, 3, false)
MUX_CFG(DM365, PWM1, 1, 2, 3, 2, false)
//MUX_CFG(DM365, PWM1_G25, 3, 29, 3, 2, false)
MUX_CFG(DM365, PWM2_G87, 1, 10, 3, 2, false)
MUX_CFG(DM365, PWM2_G88, 1, 8, 3, 2, false)
MUX_CFG(DM365, PWM2_G89, 1, 6, 3, 2, false)
MUX_CFG(DM365, PWM2_G90, 1, 4, 3, 2, false)
MUX_CFG(DM365, PWM3_G80, 1, 20, 3, 3, false)
MUX_CFG(DM365, PWM3_G81, 1, 18, 3, 3, false)
MUX_CFG(DM365, PWM3_G85, 1, 14, 3, 2, false)
MUX_CFG(DM365, PWM3_G86, 1, 12, 3, 2, false)
MUX_CFG(DM365, SPI1_SCLK, 4, 2, 3, 1, false)
MUX_CFG(DM365, SPI1_SDI, 3, 31, 1, 1, false)
MUX_CFG(DM365, SPI1_SDO, 4, 0, 3, 1, false)
MUX_CFG(DM365, SPI1_SDENA0, 4, 4, 3, 1, false)
MUX_CFG(DM365, SPI1_SDENA1, 4, 0, 3, 2, false)
MUX_CFG(DM365, SPI2_SCLK, 4, 10, 3, 1, false)
MUX_CFG(DM365, SPI2_SDI, 4, 6, 3, 1, false)
MUX_CFG(DM365, SPI2_SDO, 4, 8, 3, 1, false)
MUX_CFG(DM365, SPI2_SDENA0, 4, 12, 3, 1, false)
MUX_CFG(DM365, SPI2_SDENA1, 4, 8, 3, 2, false)
MUX_CFG(DM365, SPI3_SCLK, 0, 0, 3, 2, false)
MUX_CFG(DM365, SPI3_SDI, 0, 2, 3, 2, false)
MUX_CFG(DM365, SPI3_SDO, 0, 6, 3, 2, false)
MUX_CFG(DM365, SPI3_SDENA0, 0, 4, 3, 2, false)
MUX_CFG(DM365, SPI3_SDENA1, 0, 6, 3, 3, false)
MUX_CFG(DM365, SPI4_SCLK, 4, 18, 3, 1, false)
MUX_CFG(DM365, SPI4_SDI, 4, 14, 3, 1, false)
MUX_CFG(DM365, SPI4_SDO, 4, 16, 3, 1, false)
MUX_CFG(DM365, SPI4_SDENA0, 4, 20, 3, 1, false)
MUX_CFG(DM365, SPI4_SDENA1, 4, 16, 3, 2, false)
/*MUX_CFG(DM365, GPIO20, 3, 21, 3, 0, false)*/
/* I2C_SCL for camera interface*/
MUX_CFG(DM365, GPIO31, 4, 8, 3, 0, false)
MUX_CFG(DM365, GPIO33, 4, 12, 3, 0, false)
MUX_CFG(DM365, GPIO36, 4, 18, 3, 0, false)
/*MUX_CFG(DM365, GPIO40, 4, 26, 3, 0, false)*/
MUX_CFG(DM365, GPIO66, 2, 0, 3, 0, false)
//MUX_CFG(DM365, GPIO80, 1, 20, 3, 1, false)
MUX_CFG(DM365, GPIO82, 1, 17, 1, 1, false)
MUX_CFG(DM365, VCLK, 1, 22, 1, 0, false)
MUX_CFG(DM365, CLKOUT1, 4, 16, 3, 3, false)
MUX_CFG(DM365, VOUT_B0, 4, 0, 3, 3, false)
MUX_CFG(DM365, VOUT_B1, 4, 2, 3, 3, false)
MUX_CFG(DM365, VOUT_B2, 1, 20, 3, 2, false)
MUX_CFG(DM365, VOUT_G0, 4, 4, 3, 3, false)
MUX_CFG(DM365, VOUT_G1, 4, 6, 3, 3, false)
MUX_CFG(DM365, VOUT_R0, 4, 10, 3, 3, false)
MUX_CFG(DM365, VOUT_R1, 4, 12, 3, 3, false)
MUX_CFG(DM365, VOUT_R2, 1, 18, 3, 2, false)
MUX_CFG(DM365, VOUT_LCD_OE, 1, 17, 1, 0, false)
MUX_CFG(DM365, VOUT_FIELD, 1, 18, 3, 1, false)
MUX_CFG(DM365, VOUT_FIELD_G81, 1, 18, 3, 0, false)
MUX_CFG(DM365, VOUT_HVSYNC, 1, 16, 1, 0, false)
MUX_CFG(DM365, VOUT_COUTL_EN, 1, 0, 0xff, 0x55, false)
MUX_CFG(DM365, VOUT_COUTH_EN, 1, 8, 0xff, 0x55, false)
MUX_CFG(DM365, VIN_CAM_WEN, 0, 14, 3, 0, false)
MUX_CFG(DM365, VIN_CAM_VD, 0, 13, 1, 0, false)
MUX_CFG(DM365, VIN_CAM_HD, 0, 12, 1, 0, false)
MUX_CFG(DM365, VIN_YIN4_7_EN, 0, 0, 0xff, 0, false)
MUX_CFG(DM365, VIN_YIN0_3_EN, 0, 8, 0xf, 0, false)
INT_CFG(DM365, INT_EDMA_CC, 2, 1, 1, false)
INT_CFG(DM365, INT_EDMA_TC0_ERR, 3, 1, 1, false)
INT_CFG(DM365, INT_EDMA_TC1_ERR, 4, 1, 1, false)
INT_CFG(DM365, INT_EDMA_TC2_ERR, 22, 1, 1, false)
INT_CFG(DM365, INT_EDMA_TC3_ERR, 23, 1, 1, false)
INT_CFG(DM365, INT_PRTCSS, 10, 1, 1, false)
INT_CFG(DM365, INT_EMAC_RXTHRESH, 14, 1, 1, false)
INT_CFG(DM365, INT_EMAC_RXPULSE, 15, 1, 1, false)
INT_CFG(DM365, INT_EMAC_TXPULSE, 16, 1, 1, false)
INT_CFG(DM365, INT_EMAC_MISCPULSE, 17, 1, 1, false)
INT_CFG(DM365, INT_IMX0_ENABLE, 0, 1, 0, false)
INT_CFG(DM365, INT_IMX0_DISABLE, 0, 1, 1, false)
INT_CFG(DM365, INT_HDVICP_ENABLE, 0, 1, 1, false)
INT_CFG(DM365, INT_HDVICP_DISABLE, 0, 1, 0, false)
INT_CFG(DM365, INT_IMX1_ENABLE, 24, 1, 1, false)
INT_CFG(DM365, INT_IMX1_DISABLE, 24, 1, 0, false)
INT_CFG(DM365, INT_NSF_ENABLE, 25, 1, 1, false)
INT_CFG(DM365, INT_NSF_DISABLE, 25, 1, 0, false)
EVT_CFG(DM365, EVT2_ASP_TX, 0, 1, 0, false)
EVT_CFG(DM365, EVT3_ASP_RX, 1, 1, 0, false)
#endif
};
在这里解释一下上面每一列所代表的意思,其实也是在另外的文件里面使用架构体定义的:
struct mux_config {const char *name; //平台名字const char *mux_reg_name; // 复用寄存器名字const unsigned char mux_reg; // 使用第几个寄存器const unsigned char mask_offset; // 使用寄存器第几位const unsigned char mask; // 使用多少位来表示const unsigned char mode; // 这里就是我们需要设置的值bool debug; // 是否是调试模式
};
找到我上面标红色的两行,添加!!!然后删除掉同样使用了第三个复用寄存器的15-16,17-18四位的所有语句,就完成了所有的存起修改。
注意:如果你是一个新手,并且对这个过程完全不理解,那么有一条捷径,那就是直接把我上面的结构体代码覆盖你自己的代码。。。
4 . 打开board-dm365-evm.c文件,大概在960行附近,我们可以看到这个函数,在开头位置添加标红的两行。这两行的是意思就是UART1串口初始化启动,相当于使能。
static __init void dm365_evm_init(void)
{evm_init_i2c();davinci_cfg_reg(DM365_UART1_TXD);davinci_cfg_reg(DM365_UART1_RXD);davinci_serial_init(&uart_config);
…………
};
5 . 最后一步,回到ti-dvsdk_dm368-evm_4_02_00_06,然后执行make,或者是进入到psp目录下面执行make linux,就可以完成内核的重新编译。…
6 . 剩下的就是制作sd卡启动,在开发板上面测试结果。
zheg
DM368串口通信调试相关推荐
- 2、星光STM32F03串口通信调试
串口通信调试 main.c #include "main.h"char data[100] ; //数据缓冲流,用来存储数据int main() {System_Init();// ...
- 基于linux和qt的串口通信调试器调的设计及应用,基于linux和Qt的串口通信调试器调的设计及应用...
Q:墼 S ic n Tcnl yI oai ea c nead eho g nvt n rd e o n oH l T技术 基于 I x和 Ot iu n的串口通信调试器调的设计及应用 盂繁磊穆丽红 ...
- Android模拟器实现windows虚拟串口通信调试
1. 下载 Virtual Serial Port Driver ,安装后好后,创建一对虚拟串口 2.打开计算机管理 查看设备管理->端口 查看是否生成虚拟端口.(如果没有生成 重启试下) 3 ...
- Proteus仿真stm32和51单片机,串口通信调试过程记录
前言 本文所用Proteus版本为8.10,主要内容为在Proteus中仿真stm32和51单片机进行串口通信,记录了仿真过程中遇到的问题和解决办法. 这里要注意的是,在Proteus中 ...
- android 串口调试助手_PLC串口通信调试工具amp;调试过程
串口通信是一种简单的通信方式,通过连接少量线缆即可完成数据通信.做串口通信调试,一般需要进行如下几个过程:1.确认上位机通信;2.确认下位机通信.3.上.下位机联调通信.(上位机是指PLC,下位机是指 ...
- 单片机串口通信学号显示_触摸屏与单片机串口通信测试
工业现场在使用触摸屏的时候,与第三方控制器进行通信连接的时候,一般都是使用成熟的通信协议进行通信连接.而这些协议的实现过程,触摸屏厂商也已经在编程环境中进行了封装集成,对于使用的工程师来说,通信的数据 ...
- 【转】[Qt教程] Qt串口通信全新专题
版权声明 该文章原创于Qter开源社区(www.qter.org),转载请注明出处! 软件:QCom跨平台串口调试助手! 更新提示 这次源码更新,与前面"串口通信专题"主要有下面两 ...
- 9-《电子入门趣谈》第一章_一切从单片机开始-1.3.6串口通信
好消息:请在手机淘宝或闲鱼上搜索"电子入门趣谈",有惊喜哦 :) 我把全本电子入门趣谈的电子版(包括科技提升和理论升华部分,共计50余万字)放到上面开始兜售啦,如果您真的喜欢这本书 ...
- 树莓派已经通过网络连接通过串口通信在串口调试小助手打印与操作
在树莓派编译运行 树莓派已经通过网络连接通过串口通信在串口调试小助手打印C gcc xxx.c -lwiringPi 源码 #include <wiringSerial.h> #inclu ...
- (串口通信编程) 开源串口调试助手Common (Com Monitor)
原文地址为: (串口通信编程) 开源串口调试助手Common (Com Monitor) 最新的文档见这里:http://blog.twofei.com/566/ 我写的串口调试助手程序以及源代码. ...
最新文章
- 全球IP地址数周内用完,或现无法上网情况
- Vue 学习第八天
- Windows下UAC安全机制笔记
- Windows 任务栏缩略图自定义程序[更新 Build20100830]
- 基于java的土地档案管理系统设计(含源文件)
- (12)ISE14.7仿真流程(FPGA不积跬步101)
- 如何有效地遍历Java Map中的每个条目?
- (转) 淘淘商城系列——解决KindEditor上传图片浏览器兼容性问题
- 安全测试工具-kali_无需整理
- 中移苏研大规模资源高可用研究及实践
- Java_键盘输入语句
- 在Linux下怎样安装rarlinux?
- 实现GB28181流媒体服务解决方案如何实现海康、大华等安防摄像头、NVR、平台接入EasyGBS国标流媒体平台
- 河南巴旦木生态农业:巴旦木与杏仁有哪些不同,如何分辨巴旦木仁与杏仁?
- 树莓派开机启动chromium浏览器
- MY1690-12P语音模块实现特定的语音提示功能
- 怎么屏蔽还有照片_【文末福利】在朋友圈发男神照片忘了屏蔽父母,麻麻的回应亮了…...
- 工作20天之感悟(嵌入式开发)
- 做学问的三种境界(王国维)和八种境界(梁漱溟)
- exceljs 导入导出 excel 文件
热门文章
- 使用官方APi获取Youtube视频资源
- 20省“十四五”5G发展规划全文发布!(限时下载)
- 最小二乘法节点定位(1)——小知识:非线性方程线性化
- 大学生端午节网页作业制作 学生端午节日网页设计模板 传统文化节日端午节静态网页成品代码下载 端午节日网页设计作品
- vs213开发php,vs厂年度大作沛纳海213追针计时手表详解 - n厂手表
- 全纯函数导数的几何意义
- 远程拨号换IP的方法
- 全脑地图:单个记忆被拆分存储在多个相连的大脑区域
- 重装windows10系统的教程
- linux 多个ftp站点,vsftp在虚拟主机上建立多个ftp站点