ARM9裸机的UART程序测试

既然是在裸机上跑程序,就一定需要一段汇编语言去初始化硬件,然后用C语言写串口初始化程序。
因为ARM一上电就从地址0x0处运行程序,所以我们把程序烧到FLASH里去运行,这样在板子重启后程序也不会消失。
以下程序都是在Linux下完成的。
第一个程序汇编start.S:
 

.text
.globl _start
_start:

    /*关闭看门狗*/
    ldr    r0, =0x400040BC /*0x00000000*/
    mov    r1, #0        /*0x00000004*/    
    str    r1, [r0]    /*0x00000008*/    
    

    /*设置堆栈4K,这里要看可用的内存有多大,设置的栈不能大于可用的内存,我的这块板子可用内存最大16K*/                
    ldr    sp, =1024*4    /*0x00000010*/    
    bl main        /*0x00000014*/
halt_loop:
    b    halt_loop    /*0x00000018*/


第二个程序uart.c:


#include "config3200.h" //寄存器地址的宏定义

  

#define DLM 0

#define DLL 1

volatile uint32 Snd_N = 0;



void UART5_SendByte(uint8 data)

{

    U5THR = data;

    while(U5LSR & 0x40 == 0);

}



void UART5_SendBuf(uint8 const *RcvBufPt, uint32 Snd_N)

{

    uint32 i = 0;

    for(i = 0; i < Snd_N; i++){

        UART5_SendByte( *RcvBufPt++ );

        

    }         

}



void UART5_Init(void)

{

   /*

    * 设置波特率

    */


    U5LCR = 0x83; /* 使能波特率分频器锁存的访问 */

    U5DLM = DLM; /* 给分频器赋值,这里赋值为1 */

    U5DLL = DLL;

    U5LCR = 0x03; /* 使能THR,RBR,IER寄存器 */

    U5CLK = (134 << 0) | (19 << 8); /* 设置小数分频器为X/Y=19/134 */

  



    U5FCR      = 0x3F; /* 使能FIFO,并设置FIFO触发深度 */

    UART_CLKMODE = 0x0200; /* 选择UART5的时钟模式 */

    

    

}



int main(void)

{

    uint32 i = 0;

    UART5_Init();                     

    while (1) {

         UART5_SendBuf("hello ", 6);

        while (i++ < 10000);

        i = 0;

    }

    return 0;

}

/*********************************************************************************************************

  END FILE

*********************************************************************************************************/



最后我们需要一个二进制uart.bin,使用Makefile文件完成:

uart.bin: start.S uart.c

    arm-vfp-linux-gnu-gcc -c -o start.o start.S

    arm-vfp-linux-gnu-gcc -c -o uart.o uart.c

    arm-vfp-linux-gnu-ld -Ttext 0x00000000 start.o uart.o -o uart_elf

    arm-vfp-linux-gnu-objcopy -O binary -S uart_elf uart.bin

clean:

    rm *.bin *.o uart_elf


 输入make命令就可以得到uart.bin文件。这个二进制文件可以通过串口或者并口下载到FLASH中。下在完成后,重启板子即可来收到串口信息:hello.



<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1581) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值