在u-boot的start.S中初始化串口(for mini2440)

在u-boot启动代码start.S中初始化串口,可用于打印调试信息。

1、用汇编写一个简单的串口初始化程序


#define PCLK            50625000    // cpu时钟是405MHz,所以PCLK=405000000/8            
#define UART_CLK        PCLK        //  UART0的时钟源设为PCLK
#define UART_BAUD_RATE  115200      // 波特率
#define UART_BRD        ((UART_CLK  / (UART_BAUD_RATE * 16)) - 1)
@ USART0相关寄存器定义
#define ULCON0	0X50000000	/*线路控制寄存器*/ 
#define UCON0	0X50000004	/*控制寄存器*/ 
#define UFCON0	0X50000008	/*FIFO 控制寄存器*/ 
#define UMCON0	0X5000000C	/*MODEM 控制寄存器*/ 
#define UTRSTAT0 0x50000010  /*TX/RX 状态寄存器*/ 
#define UERSTAT0 0x50000014	/*Rx 错误状态寄存器*/ 
#define UFSTAT0	 0x50000018 /*FIFO 状态寄存器*/ 
#define UMSTAT0  0x5000001C	/*MODEM 状态寄存器*/ 
#define UTXH0_L	0x50000020	/*小端模式*/ 
#define UTXH0_B	0x50000023	/*大端模式*/ 
#define URXH0_L	0x50000024	/*小端模式*/ 
#define URXH0_B 0x50000027	/*大端模式*/ 
#define UBRDIV0	0x50000028	/*波特率分频寄存器 0*/ 

#define GPHCON	0x56000070	/*GPH控制寄存器*/
#define GPHUP	0x56000078	/*GPH内部上拉配置寄存器*/

/*usart0初始化*/

usart0_init:
@串口IO初始化
                /**第4~7位设置 1010 ,把GPH2 GPH3引脚复用到usart0*/
                ldr r12,=GPHCON
                ldr r11,[r12]
                bic r11,#0xf0
                orr r11,r11,#0xa0
                str r11,[r12]
                /**GPH2 GPH3 设置内部上拉 */
                ldr r12,=GPHUP
                ldr r11,[r12]
                bic r11,#0xc0
                str r11,[r12]

@8N1(8个数据位,无较验,1个停止位)
                ldr r11,=ULCON0
                ldr r12,= 0x03
                str r12,[r11]
@查询方式,UART时钟源为PCLK
                ldr r11,=UCON0
                ldr r12,= 0x05
                str r12,[r11]
@不使用FIFO
                ldr r11,=UFCON0
                ldr r12,= 0x00
                str r12,[r11]
@不使用流控制
                ldr r11,=UMCON0
                ldr r12,= 0x00
                str r12,[r11]
@波特率设置为115200
                ldr r11,=UBRDIV0
                ldr r12,=UART_BRD
                str r12,[r11]
                mov pc,lr

@usart0发送测试
usart0_send:
                ldr r12,=UTXH0_L
                ldr r11,=0x38
                str r11,[r12]
                mov pc,lr

修改后的u-boot.bin通过Minitool选择裸机程序方式下载到开发板运行。

程序中调用usart0_send:,打印了asc码 0x38,即字符“8”,如下图所示:
在这里插入图片描述

2、在汇编中用串口打印寄存器内容

汇编代码如下:

@检查usart0是否发送完成,未完成则等待
check_tx_flag:
                ldr r1,=UTRSTAT0
                ldr r0,[r1]
                tst r0,#4
                beq   check_tx_flag
                mov pc,lr

@打印r10寄存器数据
usart0_print_r10:   
                mov r11, #0x4 @循环4次,每次打印一字节数据
                0:
                @发送一字节数据
                ldr r12,=UTXH0_L
				MOV  R10, R10, ROR #24		@循环右移24位
                str r10,[r12]	@一次发生8bit数据
               
                mov r1,lr		@保存lr
                bl check_tx_flag   @等待发送完成(这里会改变lr)
                mov lr,r1		@恢复lr

                @判断循环是否结束
                sub r11, r11, #1
                mov r12, #0
                cmp r11, r12
                bne 0b
                mov pc,lr //返回被调用的地方

使用方法如下:

...........
...........
@把R10寄存器的内容打印到串口

ldr r10,=0x31323334
bl usart0_print_r10
b .			//程序停在在这里(死循环)

打印效果
字符显示:
在这里插入图片描述
16进制显示:
在这里插入图片描述
可以看到R10的内容(ldr r10,=0x31323334)被成功打印出来了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yfw&武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值