专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
TI
修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)
2019-07-27 17:18
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
4600
13
1772
1.1 概述
TI针对DM6467提供的UBOOT和内核默认都是串口0作为调试串口输出的,但现在我需要使用DM6467的UART0的modem功能,所以修改代码,改变调试串口为串口2。
需要修改的主要有几部分内容:
1. UBL 代码(这部分代码在刚上电的时候,初始化CPU和拷贝UBOOT到DDR,打印信息只有很少,所以不做修改)。
2. UBOOT代码。
3. linux内核驱动。
使用的代码及版本请参考:
http://processors.wiki.ti.com/index.php/DaVinci_PSP_03.01_Beta_(r31)_Release_Notes
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
白丁野老
1楼-- · 2019-07-27 22:15
2.1 修改UBOOT代码
因为DM6467的串口是符合TL16C550标准的,所以驱动也是使用16550的驱动,默认情况下,我们只需要提供需要配置的串口的基地址和中断号等资源给16550的驱动就可以了,寄存器的配置不需要我们去关心。
要用起DM6467的串口有几个地方的配置一定要注意:
1. 引脚复用寄存器(PINMUX0/1);
2. VDD3P3V_PWDN寄存器,需要使能UART的相关引脚(bit4~bit9置零)
3.CLKCTL,bit24/25置零。
在UBOOT里涉及到上面几个寄存器的配置的是在dm6467_evm.c的初始化部分
加载中...
白丁野老
2楼-- · 2019-07-28 02:40
我的修改如下:
1 static void davinci_hd_psc_enable ( void )
2 {
3 unsigned int alwaysonpdnum = 0;
4
5 /* Note this function assumes that the Power Domains are alread on */
6 REG(PSC_ADDR+0xA00+4*14) |= 0x03; /* EMAC */
7 REG(PSC_ADDR+0xA00+4*15) |= 0x03; /* VDCE */
8 REG(PSC_ADDR+0xA00+4*16) |= 0x03; /* Video Port */
9 REG(PSC_ADDR+0xA00+4*17) |= 0x03; /* Video Port */
10 REG(PSC_ADDR+0xA00+4*20) |= 0x03; /* DDR2 */
11 REG(PSC_ADDR+0xA00+4*21) |= 0x03; /* EMIFA */
12 REG(PSC_ADDR+0xA00+4*26) |= 0x03; /* UART0 */
13 REG(PSC_ADDR+0xA00+4*27) |= 0x03; /* UART1 */
14 REG(PSC_ADDR+0xA00+4*28) |= 0x03; /* UART2 */
15 REG(PSC_ADDR+0xA00+4*31) |= 0x03; /* I2C */
16 REG(PSC_ADDR+0xA00+4*33) |= 0x03; /* GPIO */
17 REG(PSC_ADDR+0xA00+4*34) |= 0x03; /* TIMER0 */
18 REG(PSC_ADDR+0xA00+4*35) |= 0x03; /* TIMER1 */
19
20 /* Set PTCMD.GO to 0x1 to initiate the state transtion for Modules in
21 * the ALWAYSON Power Domain
22 */
23 REG(PSC_PTCMD) = (1<<alwaysonpdnum);
24
25 /* Wait for PTSTAT.GOSTAT0 to clear to 0x0 */
26 while(! (((REG(PSC_PTSTAT) >> alwaysonpdnum) & 0x00000001) == 0));
27
28 /* Enable GIO3.3V cells used for EMAC (???) */
29 REG(VDD3P3V_PWDN) = (1<<27); //disable clkout0
30
31 /* Select UART function on UART0 */
32 REG(PINMUX0) &= ~(0x0000003f << 18);
34 REG(PINMUX1) = ((1<<4)|(1<<2)|(1<<0));
35
36 /* Enable USB */
37 REG(PINMUX0) &= ~(0x80000000);
38
39 /* Set the Bus Priority Register to appropriate value */
40 REG(VBPR) = 0x20;
41 }
复制代码
加载中...
白丁野老
3楼-- · 2019-07-28 03:03
精彩回答 2 元偷偷看……
加载中...
白丁野老
4楼-- · 2019-07-28 03:06
修改如下:
1 void NS16550_init (NS16550_t com_port, int baud_divisor)
2 {
3 com_port->ier = 0x00;
4 #if defined(CFG_DM6467_EVM)
5 com_port->mdr1 = 0x00; /* select mode */
6 #endif
7 #if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
8 com_port->mdr1 = 0x7; /* mode select reset TL16C750*/
9 #endif
10 com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
11 com_port->dll = 0;
12 com_port->dlm = 0;
13 com_port->lcr = UART_LCRVAL;
14 com_port->mcr = UART_MCRVAL;
15 com_port->fcr = UART_FCRVAL;
16 com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
17 com_port->dll = baud_divisor & 0xff;
18 com_port->dlm = (baud_divisor >> 8) & 0xff;
19 com_port->lcr = UART_LCRVAL;
20 #if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
21 #if defined(CONFIG_APTIX)
22 com_port->mdr1 = 3; /* /13 mode so Aptix 6MHz can hit 115200 */
23 #else
24 com_port->mdr1 = 0; /* /16 is proper to hit 115200 with 48MHz */
25 #endif
26 #endif /* CONFIG_OMAP */
27 }
复制代码
加载中...
白丁野老
5楼-- · 2019-07-28 05:16
修改完上面的代码后,就可以在配置文件里添加配置信息,并修改调试调试串口号了。打开/include/configs/davinci_dm6467_evm.c,找到串口配置部分,修改如下:
1 /*====================*/
2 /* Serial Driver info */
3 /*====================*/
4 #define CONFIG_SYS_NS16550
5 #define CONFIG_SYS_NS16550_SERIAL
6 #define CONFIG_SYS_NS16550_REG_SIZE 4 /* NS16550 register size, byteorder */
7 //#define CONFIG_SYS_NS16550_COM1 0x01c20000 /* Base address of UART0 */
8 //#define CONFIG_CONS_INDEX 1 /* use UART0 for console */
9 //#define CONFIG_SYS_NS16550_COM2 0x01c20400 /* Base address of UART1 */
10 //#define CONFIG_CONS_INDEX 2 /* use UART1 for console */
11 #define CONFIG_SYS_NS16550_COM3 0x01c20800 /* Base address of UART2 */
12 #define CONFIG_CONS_INDEX 3 /* use UART2 for console */
13 #define CONFIG_SYS_NS16550_CLK 24000000 /* Input clock to NS16550 */
14 #define CONFIG_BAUDRATE 115200 /* Default baud rate */
15 #define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
复制代码
加载中...
白丁野老
6楼-- · 2019-07-28 07:22
重新编译UBOOT,下载测试,这时候UBOOT的打印信息应该从串口2输出了。
正常情况下可以输出到下面的内容:
Starting kernel ...
加载中...
1
2
3
下一页
一周热门
更多
>
相关问题
CPLD的方波输出
4 个回答
11个版本Quartus II 软件下载,安装包网盘合集,附教程,47G!
20 个回答
请大家帮忙到21IC发展大家谈支持我申请新版面
20 个回答
【通知】21ic中国电子网服务条款 (所有人员必读)
1 个回答
满载而归乙亥年,大展鸿途庚子年---集签赢好礼
20 个回答
携手ADI,踏上电子工程师之巅—车辆电气化视频,答题领奖!
1 个回答
如何提升论坛质量,看你了!
20 个回答
【最终名单】二姨家喊你来拿100份新年大礼啦~
20 个回答
相关文章
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
TI
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
因为DM6467的串口是符合TL16C550标准的,所以驱动也是使用16550的驱动,默认情况下,我们只需要提供需要配置的串口的基地址和中断号等资源给16550的驱动就可以了,寄存器的配置不需要我们去关心。
要用起DM6467的串口有几个地方的配置一定要注意:
1. 引脚复用寄存器(PINMUX0/1);
2. VDD3P3V_PWDN寄存器,需要使能UART的相关引脚(bit4~bit9置零)
3.CLKCTL,bit24/25置零。
在UBOOT里涉及到上面几个寄存器的配置的是在dm6467_evm.c的初始化部分
- 1 static void davinci_hd_psc_enable ( void )
- 2 {
- 3 unsigned int alwaysonpdnum = 0;
- 4
- 5 /* Note this function assumes that the Power Domains are alread on */
- 6 REG(PSC_ADDR+0xA00+4*14) |= 0x03; /* EMAC */
- 7 REG(PSC_ADDR+0xA00+4*15) |= 0x03; /* VDCE */
- 8 REG(PSC_ADDR+0xA00+4*16) |= 0x03; /* Video Port */
- 9 REG(PSC_ADDR+0xA00+4*17) |= 0x03; /* Video Port */
- 10 REG(PSC_ADDR+0xA00+4*20) |= 0x03; /* DDR2 */
- 11 REG(PSC_ADDR+0xA00+4*21) |= 0x03; /* EMIFA */
- 12 REG(PSC_ADDR+0xA00+4*26) |= 0x03; /* UART0 */
- 13 REG(PSC_ADDR+0xA00+4*27) |= 0x03; /* UART1 */
- 14 REG(PSC_ADDR+0xA00+4*28) |= 0x03; /* UART2 */
- 15 REG(PSC_ADDR+0xA00+4*31) |= 0x03; /* I2C */
- 16 REG(PSC_ADDR+0xA00+4*33) |= 0x03; /* GPIO */
- 17 REG(PSC_ADDR+0xA00+4*34) |= 0x03; /* TIMER0 */
- 18 REG(PSC_ADDR+0xA00+4*35) |= 0x03; /* TIMER1 */
- 19
- 20 /* Set PTCMD.GO to 0x1 to initiate the state transtion for Modules in
- 21 * the ALWAYSON Power Domain
- 22 */
- 23 REG(PSC_PTCMD) = (1<<alwaysonpdnum);
- 24
- 25 /* Wait for PTSTAT.GOSTAT0 to clear to 0x0 */
- 26 while(! (((REG(PSC_PTSTAT) >> alwaysonpdnum) & 0x00000001) == 0));
- 27
- 28 /* Enable GIO3.3V cells used for EMAC (???) */
- 29 REG(VDD3P3V_PWDN) = (1<<27); //disable clkout0
- 30
- 31 /* Select UART function on UART0 */
- 32 REG(PINMUX0) &= ~(0x0000003f << 18);
- 34 REG(PINMUX1) = ((1<<4)|(1<<2)|(1<<0));
- 35
- 36 /* Enable USB */
- 37 REG(PINMUX0) &= ~(0x80000000);
- 38
- 39 /* Set the Bus Priority Register to appropriate value */
- 40 REG(VBPR) = 0x20;
- 41 }
复制代码- 1 void NS16550_init (NS16550_t com_port, int baud_divisor)
- 2 {
- 3 com_port->ier = 0x00;
- 4 #if defined(CFG_DM6467_EVM)
- 5 com_port->mdr1 = 0x00; /* select mode */
- 6 #endif
- 7 #if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
- 8 com_port->mdr1 = 0x7; /* mode select reset TL16C750*/
- 9 #endif
- 10 com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
- 11 com_port->dll = 0;
- 12 com_port->dlm = 0;
- 13 com_port->lcr = UART_LCRVAL;
- 14 com_port->mcr = UART_MCRVAL;
- 15 com_port->fcr = UART_FCRVAL;
- 16 com_port->lcr = UART_LCR_BKSE | UART_LCRVAL;
- 17 com_port->dll = baud_divisor & 0xff;
- 18 com_port->dlm = (baud_divisor >> 8) & 0xff;
- 19 com_port->lcr = UART_LCRVAL;
- 20 #if defined(CONFIG_OMAP) && !defined(CONFIG_OMAP3_ZOOM2)
- 21 #if defined(CONFIG_APTIX)
- 22 com_port->mdr1 = 3; /* /13 mode so Aptix 6MHz can hit 115200 */
- 23 #else
- 24 com_port->mdr1 = 0; /* /16 is proper to hit 115200 with 48MHz */
- 25 #endif
- 26 #endif /* CONFIG_OMAP */
- 27 }
复制代码- 1 /*====================*/
- 2 /* Serial Driver info */
- 3 /*====================*/
- 4 #define CONFIG_SYS_NS16550
- 5 #define CONFIG_SYS_NS16550_SERIAL
- 6 #define CONFIG_SYS_NS16550_REG_SIZE 4 /* NS16550 register size, byteorder */
- 7 //#define CONFIG_SYS_NS16550_COM1 0x01c20000 /* Base address of UART0 */
- 8 //#define CONFIG_CONS_INDEX 1 /* use UART0 for console */
- 9 //#define CONFIG_SYS_NS16550_COM2 0x01c20400 /* Base address of UART1 */
- 10 //#define CONFIG_CONS_INDEX 2 /* use UART1 for console */
- 11 #define CONFIG_SYS_NS16550_COM3 0x01c20800 /* Base address of UART2 */
- 12 #define CONFIG_CONS_INDEX 3 /* use UART2 for console */
- 13 #define CONFIG_SYS_NS16550_CLK 24000000 /* Input clock to NS16550 */
- 14 #define CONFIG_BAUDRATE 115200 /* Default baud rate */
- 15 #define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
复制代码正常情况下可以输出到下面的内容:
Starting kernel ...
一周热门 更多>