修改UBOOT和LINUX调试串口(TI达芬奇芯片--DM6467)

Posted on 2011-10-31 10:53 jamiedu 阅读(889) 评论(0) 编辑 收藏

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

 

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的初始化部分

    我的修改如下:

 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 }

  接下来还有一个比较重要的地方需要修改,因为DM6467的串口是支持多种模式的,但16550的驱动是默认设备是工作在UART模式的,它没有去配置设备串口的工作模式,所以我们需要去配置一下串口的工作模式。配置DM6467的需要修改寄存器去MDR1。只部分的代码在UBOOT的driver目录下的ns16550.c文件中。

     修改如下:

 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 }

    修改完上面的代码后,就可以在配置文件里添加配置信息,并修改调试调试串口号了。打开/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 }

    重新编译UBOOT,下载测试,这时候UBOOT的打印信息应该从串口2输出了。

    正常情况下可以输出到下面的内容:

Starting kernel ...

 

3.1 修改内核调试串口

   3.1.1 内核解压输出信息

        内核解压时使用的串口驱动是独立于UBOOT或内核的串口驱动的,解压时输出的打印信息的相关的代码在/arch/arm/mach_davinci/include/mach/uncompress.h内。这里的串口输出代码很简单,只是往数据寄存器写数据,并没有对串口进行相关的配置,所以这里串口的正常输出需要依赖UBOOT对串口的正确配置。uncompress.h文件修改如下:

1 static u32 *get_uart_base(void)
2 {
3     if (__machine_arch_type == MACH_TYPE_DAVINCI_DA830_EVM ||
4         __machine_arch_type == MACH_TYPE_DAVINCI_DA850_EVM)
5         return (u32 *)DA8XX_UART2_BASE;
6     else
7         //return (u32 *)DAVINCI_UART0_BASE;
8         return (u32 *)DAVINCI_UART2_BASE; /* 这里修改为对应的寄存器基地址 */
9 }

      编译内核,通过刚才更新的UBOOT下载内核,并启动应该就可以看到熟悉的解压信息了:

1 Uncompressing Linux................................................................................................................................................................done, booting the kernel.

 

    3.1.2 修改内核驱动,改变内核调试串口

    因为内核启动时会对上面提到的几个寄存器作修改,所以需要修改/arch/arm/mach_davinci/board_dm646x_evm.c文件来确认2.1提到的寄存器的配置,同时需要使能UART1或UART2的时钟,默认情况下是只使能UART0的时钟。内核串口驱动就不需要修改了,因为也是16550的驱动,这份驱动也没有去配置串口的工作模式,所以UBOOT里配置了寄存器就行了,除非你想确认寄存器的配置,防止启动内核时寄存器被修改了或想控制串口的工作模式。

   使能UART1/2时钟:

1 static struct davinci_uart_config uart_config __initdata = {
2 
3     .enabled_uarts = (1 << 0)|(1 << 1)|(1 << 2),
4 
5 };

  重新编译内核,启动UBOOT,修改内核启动参数:

console=ttyS2,115200n8

下载内核,启动~~顺利的话就可以在UART2上输出系统的调试信息了:

Uncompressing Linux.......................................................................................................................... done, booting the kernel.
Linux version 2.6.32-rc2-davinci1 (root@ubuntuSv) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #107 PREEMPT Tue Oct 25 08:04:49 UTC 2011
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: ZMV-6467
Memory policy: ECC disabled, Data cache writeback
DaVinci dm6467_rev3.x variant 0x1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon车刀崩边检测

list_files (新建文件夹, files, Files) read_image (Image, Files[0]) dev_close_window () get_image_size (Image, Width, Height) dev_open_window (0, 0, Width/1.5, Height/1.5, black, WindowHandle) dev_set_draw (margin) dev_set_colored (12) for Index:0 to |Files…

FFMPEG解码264文件步骤

本文以H264视频流为例&#xff0c;讲解解码流数据的步骤。 为突出重点&#xff0c;本文只专注于讨论解码视频流数据&#xff0c;不涉及其它&#xff08;如开发环境的配置等&#xff09;。如果您需要这方面的信息&#xff0c;请和我联系。 准备变量 定义AVCodecContext。如果…

Confluence 6 配置服务器基础地址示例

2019独角兽企业重金招聘Python工程师标准>>> 如果 Confluence 的安装是没有安装在非根目录路径&#xff08;这个是上下文路径&#xff09;&#xff0c;然后服务器基础 URL 地址应该包括上下文地址。例如&#xff0c;你的 Confluence 正在运行在下面的地址&#xff1…

BootstrapValidator验证

bootstrap&#xff1a;能够增加兼容性的强大框架. 因为项目需要数据验证&#xff0c;看bootstrapValidator 还不错&#xff0c;就上手一直&#xff0c;完美兼容&#xff0c;话不多说。 需要引用css&#xff1a; bootstrap.min.css bootstrapValidator.min.css js: jquery-1.10.…

halcon找矩形顶点的一种方法

主程序&#xff1a; read_image (Image11, 11)*画仿射矩形 dev_set_color (green) draw_rectangle2 (3600, Row, Column, Phi, Length1, Length2)*生成仿射矩形xld gen_rectangle2_contour_xld (Rectangle, Row, Column, Phi, Length1, Length2) *找顶点工具&#xff08;基于卡…

H264关于RTP协议的实现

完整的C&#xff0f;S架构的基于RTP&#xff0f;RTCP的H&#xff0e;264视频传输方案。此方案中&#xff0c;在服务器端和客户端分别进行了功能模块设计。服务器端&#xff1a;RTP封装模块主要是对H&#xff0e;264码流进行打包封装&#xff1b;RTCP分析模块负责产牛和发送RTCP…

华为数通HCIE面试题目解密系列之RSTP边缘端口

以下是华为数通面试考试的一道真题&#xff0c;原题如下&#xff1b; 请举例说明 stp 的 edge port 的作用,用在什么场景&#xff0c;并且使用 edge port 会碰到什么问题&#xff0c;怎么解决和防止&#xff1f; 提到边缘端口&#xff0c;我们是在NP课程的交换部分第一次接触&a…

Django:视图和URL配置

一、视图1.在mysite文件夹下。创建views.py文件&#xff08;文件名称没有特别的要求&#xff09;&#xff1b;from django.http import HttpResponsedef hello(request):return HttpResponse("Hello world")2.改动mysite文件夹下的urls.py文件&#xff1b;from djang…

u-boot 详细介绍 .

Bootloader 对于计算机系统来说&#xff0c;从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序&#xff0c;这个引导程序就叫作Bootloader。6.1.1 Bootloader介绍Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序&#xff0c;我们…

apicloud使用指南

ApiCloud ApiCloud平台介绍 ApiCloud首页在线教程文档ApiCloud是一个国内的Hybird APP平台&#xff0c;提供Hybird APP一站式开发服务。可以将使用HTML、CSS和JS制作的应用直接编译为能在安卓和IOS平台上运行的APP。另外&#xff0c;其所提供的代码托管和在线编译服务&#xff…

halcon对光源打光不均匀进行平场矫正

* Image Acquisition 01: Code generated by Image Acquisition 01 *******预处理&#xff0c;生成RGB三通道的平场矫正的图像 *1.绘制检测ROI *2.对检测的ROI进行平场矫正 *3.平场矫正方法采用均值对减方法 read_image (ImageWhite, C:/Users/Administrator/Desktop/平场矫正/…

金属圆柱求取倾斜角度

方法1&#xff1a; count_seconds (Seconds1)read_image (Image, 9_7750_f3d301de6764d94.jpg)get_image_size (Image, Width, Height)dev_open_window (0, 0, Width, Height, black, WindowHandle)dev_display (Image)rgb1_to_gray (Image, GrayImage)dev_display (GrayImage)…

PhpStudy 升级 MySQL 版本到5.7

1&#xff1a;备份当前数据库数据、 最好是导成 SQL 文件2&#xff1a;备份 PhpStudy 下的 MySQL 文件夹、以防升级失败、还可以使用旧版本的数据库3&#xff1a;下载MySQL5.7、解压、然后放在 PhpStudy 下的 MySQL 文件夹下地址&#xff1a;https://dev.mysql.com/downloads/f…

使用直线标定板进行相机畸变校正,并且进行9点标定(halcon)

直线标定板图片&#xff1a; 机械吸头位置图片&#xff1a; 处理代码 read_image (Image, 直线标定板图片/Left201118140641772.bmp) get_image_size (Image, Width, Height) dev_close_window () dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle) dev_display…

【Java MyBatis Generator】使用generator自动生成Dao,Mapping和实体文件

具体请参照&#xff1a; http://blog.csdn.net/fengshizty/article/details/43086833 按照上面博客地址&#xff0c;下载Generator的依赖包&#xff1a; 如下是我的配置文件&#xff1a; 1 <?xml version"1.0" encoding"UTF-8"?>2 <!DOCTYPE ge…

h5移动端设备像素比dpr介绍

首先介绍一下概念 devicePixelRatio其实指的是window.devicePixelRatio window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例。 公式表示就是&#xff1a;window.devicePixelRatio 物理像素 / dips 好了&#xff0c;到了这里有出…

halcon直线标定板对相机标定的效果评估(对比矫正前后、对比标定板矫正效果)

原图 程序源码 * gen_caltab (7, 7, 0.0025, 1/2.5, GB025标定板.descr, GB025标定板.ps) * Calibration 01: Code generated by Calibration 01 * CameraParameters : [0.048105,-44.0585,8.31518e-006,8.3e-006,641.37,588.269,1280,1024] * CameraPose : [-0.000849522,-0.…

【QQ输入法】QQ输入法-剪切板 释放内存

发现一个神奇的情况&#xff1a; 清除和关闭的操作&#xff1a; 1. 2.右键 3.点击 4.清空 5.最后需要关闭 QQ输入法的进程

真的要做一辈子的程序员吗?来自10年程序员的心声

经常听一些同学说&#xff1a;不知道下一份工作该去哪类公司做些什么&#xff0c;我的职场人际一团糟老板不重视我&#xff0c;我现在成长的非常慢所以又想跳槽了&#xff0c;我看不到公司的发展前景好迷茫&#xff0c;其实这一切的困惑都来源于没有做好职业规划或者你根本就没…

网络编程之 TCP / UDP 及其流程比较

TCP与UDP的区别 1、基于连接与无连接 2、对系统资源的要求&#xff08;TCP较多&#xff0c;UDP少&#xff09;3、UDP程序结构较简单 流模式与数据报模式 4、TCP保证数据正确性&#xff0c;UDP可能丢包 5、TCP保证数据顺序&#xff0c;UDP不保证具体编程时的区别 1、socket()的参…