您的位置:首页 > 其它

ARM9裸机的UART程序测试

2014-06-06 20:31 369 查看
既然是在裸机上跑程序,就一定需要一段汇编语言去初始化硬件,然后用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.

阅读(1581) | 评论(0) | 转发(0) |

0
上一篇:ARM汇编实验-工作模式

下一篇:linux静态库和动态库分析

相关热门文章

oc总结

Linux设备驱动程序

使用Linux命令行测试网速...

Android对Linux内核的增强- lo...

浅析armlinux2.4.19启动程序[h...

shell中字符串操作

shell中的特殊字符

stagefright与opencore对比

linux守护进程的几个关键地方...

Android常用的一些make命令...

初学UNIX环境高级编程的,关于...

chinaunix博客什么时候可以设...

一个访问量较大网站的服务器。...

收音机驱动与v4l2架构的关系,...

如何将linux驱动改为裸机驱动(...

给主人留下些什么吧!~~

评论热议
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: