基于i.MX233的UART测试程序
2011-10-12 13:10
429 查看
i.MX233是freescale公司退出的一款ARM9处理器,该芯片集成了PMU单元,并集成了各种常用接口,大大降低了系统成本。。
硬件配置如下:
1. USB线接PC机和开发板,进行数据下载和供电;
2. 连接串口,用于打印信息;
3. 最好不要安装LCD屏,防止USB供电不足,如果供电不足,也可以使用外置电源供电。
4. 启动模式配置为:0000,即USB启动
软件下载工具: 采用freescale的mtfg tool。
编译环境:
arm-none-linux-gnueabi-gcc和gcc-arm-linux-gnueabi
具体安装方式可参考:
程序代码:
代码部分比较简单,只有一个UART的简单初始化部分。即最重要的代码部分是uart_init()代码如下:
int Uart_init()
{
/* setting baud rate divisor */
HW_UARTDBGIBRD = DIVISOR >> 6; //Integer
HW_UARTDBGFBRD = DIVISOR & 0x3f;//Fractional
/* BRD only updated when a write to LCR_H, so this should be at the end
* 8 data bits, no parity bit, 1 stop bits, FIFO enabled */
HW_UARTDBGLCR_H = 0x70;//Even Parity Select
/* uart enabled, and receive and transmit, disable flow control */
HW_UARTDBGCR = 0x301;
return 0;
}
init函数中只是设定了串口的波特率,校验位,数据位等必备的参数,代码波特率中设定的是115200,通过uart.h中的宏定义#define UARTCLK24000000 //24MHz来确定。然后通过设定uart enable就可以使用了。main()函数中只是调用了这个init函数然后就可以打印了。打印即和pc通过串口发送数据。
其他代码:
//file: uart.h
#define UART
#ifdef UART
#define HW_UARTDBGDR (* (volatile unsigned *) 0x80070000)// data register
#define HW_UARTDBGFR (* (volatile unsigned *) 0x80070018)// flag register
#define HW_UARTDBGIBRD (* (volatile unsigned *) 0x80070024)// integer baud rate divisor
#define HW_UARTDBGFBRD (* (volatile unsigned *) 0x80070028)// fractional baud rate divisor
#define HW_UARTDBGLCR_H (* (volatile unsigned *) 0x8007002C)// line control registe, high byte
#define HW_UARTDBGCR (* (volatile unsigned *) 0x80070030)// control register
#define Uart_out(ch)HW_UARTDBGDR = (unsigned char) (ch)
#define UARTCLK 24000000 //24MHz
#define BAUD_RATE 115200
#define DIVISOR UARTCLK*4 / BAUD_RATE //UARTCLK*4 is UARTCLK << 3
#endif
#define HW_DIGCTL_MICROSECONDS (* (volatile unsigned *) 0x8001c0c0)
int print_string(char *str);
int Uart_init();
void delay(unsigned int us);
int error();
//uart.h end
//file:uart.c
#include "uart.h"
/*
.test
.globl _start //init sp 0x0000 - 0x1000;
mov sp,0x1000
bl main
*/
int print_string(char *str)
{
int loop = 0;
while(*str)
{
while (HW_UARTDBGFR & 0x20) /* wait if transmit fifo is full */
{
loop++;
if (loop > 10000)break;
};
HW_UARTDBGDR = *str;
if (*str == '\n')
{
while(HW_UARTDBGFR & 0x20)
{
loop++;
if (loop > 10000)break;
}
HW_UARTDBGDR = '\r';
}
str++;
}
return 0;
}
/************************************************************/
/*Fuction: UART init
/*Mode:
/************************************************************/
int Uart_init()
{
/* setting baud rate divisor */
HW_UARTDBGIBRD = DIVISOR >> 6; //Integer
HW_UARTDBGFBRD = DIVISOR & 0x3f;//Fractional
/* BRD only updated when a write to LCR_H, so this should be at the end
* 8 data bits, no parity bit, 1 stop bits, FIFO enabled */
HW_UARTDBGLCR_H = 0x70;//Even Parity Select
/* uart enabled, and receive and transmit, disable flow control */
HW_UARTDBGCR = 0x301;
return 0;
}
void delay(unsigned int us)
{
unsigned int start , cur;
start = cur = HW_DIGCTL_MICROSECONDS;
while (cur < start+us) {
cur = HW_DIGCTL_MICROSECONDS;
/*printf("0x%x\r\n",cur);*/
}
}
int error()
{
while(1);
return 0;
}
//uart.c end
//file:uart_test.c
#include "uart.h"
int main()
{
Uart_init();//uart init
print_string("\n...............................\n");
print_string(". uart init is finished! .\n");
print_string("...............................\n");
print_string("\nHello World!\n");
print_string("\nThanks!\n");
print_string("...............................\n");
print_string("test");
while(1);
return 0;
}
//uart_test.c end
硬件配置如下:
1. USB线接PC机和开发板,进行数据下载和供电;
2. 连接串口,用于打印信息;
3. 最好不要安装LCD屏,防止USB供电不足,如果供电不足,也可以使用外置电源供电。
4. 启动模式配置为:0000,即USB启动
软件下载工具: 采用freescale的mtfg tool。
编译环境:
arm-none-linux-gnueabi-gcc和gcc-arm-linux-gnueabi
具体安装方式可参考:
程序代码:
代码部分比较简单,只有一个UART的简单初始化部分。即最重要的代码部分是uart_init()代码如下:
int Uart_init()
{
/* setting baud rate divisor */
HW_UARTDBGIBRD = DIVISOR >> 6; //Integer
HW_UARTDBGFBRD = DIVISOR & 0x3f;//Fractional
/* BRD only updated when a write to LCR_H, so this should be at the end
* 8 data bits, no parity bit, 1 stop bits, FIFO enabled */
HW_UARTDBGLCR_H = 0x70;//Even Parity Select
/* uart enabled, and receive and transmit, disable flow control */
HW_UARTDBGCR = 0x301;
return 0;
}
init函数中只是设定了串口的波特率,校验位,数据位等必备的参数,代码波特率中设定的是115200,通过uart.h中的宏定义#define UARTCLK24000000 //24MHz来确定。然后通过设定uart enable就可以使用了。main()函数中只是调用了这个init函数然后就可以打印了。打印即和pc通过串口发送数据。
其他代码:
//file: uart.h
#define UART
#ifdef UART
#define HW_UARTDBGDR (* (volatile unsigned *) 0x80070000)// data register
#define HW_UARTDBGFR (* (volatile unsigned *) 0x80070018)// flag register
#define HW_UARTDBGIBRD (* (volatile unsigned *) 0x80070024)// integer baud rate divisor
#define HW_UARTDBGFBRD (* (volatile unsigned *) 0x80070028)// fractional baud rate divisor
#define HW_UARTDBGLCR_H (* (volatile unsigned *) 0x8007002C)// line control registe, high byte
#define HW_UARTDBGCR (* (volatile unsigned *) 0x80070030)// control register
#define Uart_out(ch)HW_UARTDBGDR = (unsigned char) (ch)
#define UARTCLK 24000000 //24MHz
#define BAUD_RATE 115200
#define DIVISOR UARTCLK*4 / BAUD_RATE //UARTCLK*4 is UARTCLK << 3
#endif
#define HW_DIGCTL_MICROSECONDS (* (volatile unsigned *) 0x8001c0c0)
int print_string(char *str);
int Uart_init();
void delay(unsigned int us);
int error();
//uart.h end
//file:uart.c
#include "uart.h"
/*
.test
.globl _start //init sp 0x0000 - 0x1000;
mov sp,0x1000
bl main
*/
int print_string(char *str)
{
int loop = 0;
while(*str)
{
while (HW_UARTDBGFR & 0x20) /* wait if transmit fifo is full */
{
loop++;
if (loop > 10000)break;
};
HW_UARTDBGDR = *str;
if (*str == '\n')
{
while(HW_UARTDBGFR & 0x20)
{
loop++;
if (loop > 10000)break;
}
HW_UARTDBGDR = '\r';
}
str++;
}
return 0;
}
/************************************************************/
/*Fuction: UART init
/*Mode:
/************************************************************/
int Uart_init()
{
/* setting baud rate divisor */
HW_UARTDBGIBRD = DIVISOR >> 6; //Integer
HW_UARTDBGFBRD = DIVISOR & 0x3f;//Fractional
/* BRD only updated when a write to LCR_H, so this should be at the end
* 8 data bits, no parity bit, 1 stop bits, FIFO enabled */
HW_UARTDBGLCR_H = 0x70;//Even Parity Select
/* uart enabled, and receive and transmit, disable flow control */
HW_UARTDBGCR = 0x301;
return 0;
}
void delay(unsigned int us)
{
unsigned int start , cur;
start = cur = HW_DIGCTL_MICROSECONDS;
while (cur < start+us) {
cur = HW_DIGCTL_MICROSECONDS;
/*printf("0x%x\r\n",cur);*/
}
}
int error()
{
while(1);
return 0;
}
//uart.c end
//file:uart_test.c
#include "uart.h"
int main()
{
Uart_init();//uart init
print_string("\n...............................\n");
print_string(". uart init is finished! .\n");
print_string("...............................\n");
print_string("\nHello World!\n");
print_string("\nThanks!\n");
print_string("...............................\n");
print_string("test");
while(1);
return 0;
}
//uart_test.c end
相关文章推荐
- 基于Linux的S3C6410模拟SPI的外围设备驱动程序、Makefile及测试程序的实现
- Linux下UART串口的测试小程序
- VS2005写的第一个基于Wince5.0 设备的测试程序, 读取当前。NET版本号。
- 基于CPPUNIT测试框架开发Android平台的测试程序
- 基于XML和Python实现白盒测试程序与测试用例分离
- OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)
- USB Camera 采集图像预览测试程序(基于linux3.9.7 QT210)
- OK6410 uart 简单测试程序
- 基于android下测试串口的程序
- TQ2440裸奔程序>>串口UART的PC机按键测试程序
- OpenCV学习笔记(25)基于MFC和OpenCV的摄像机定标与立体匹配测试程序(20140505更新)
- TQ2440裸奔程序>>串口UART打印printf测试程序
- TQ2440裸奔程序:串口UART打印printf测试程序
- sock_ev——linux平台socket事件框架(基于字节流的测试程序)
- A10 A20 UART测试程序
- 基于UDP的单线程网络点对点数据包收发测试程序
- 《PCL点云库学习&VS2010(X64)》Part 6 VTK6.2+VS2013+Qt5.5 测试VTK基于VS2013的Qt程序之PCLViewer
- 基于android下测试串口的程序
- ARM9裸机的UART程序测试
- 基于C#程序的AJAX 自动化测试