第四步:串口(基于飞凌6410的开发板)
来源:互联网 发布:C语言unlink函数 编辑:程序博客网 时间:2024/05/06 02:49
串口
通过这个程序就可以实现串口通信,在终端上实现控制了(现在还不能,还没添加),初步就显示自己的信息把!!!一:start.S代码如下:
#include"myuboot.h".global _start
_start:
b reset
b undefined_instruction
b software_interrupt
b prefetch_abort
b data_abort
b not_used
b irq
b fiq
reset:
/* Peri port setup */
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15, 0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff)
/* Disable Watchdog */
ldr r0, =WTCON
mov r1, #0
str r1, [r0]
mov sp, #8*1024 //设置堆栈,否着后面c不能用
bl led
bl system_clock_init
bl gequ
bl memory_init
ldr sp, =0x57000000 //初始化内存后就可以把sp移到这里了,然后在用一个歌曲测试一下,如果没成功的话,歌曲是不会播放出来的
bl gequ
bl uart_init
undefined_instruction:
software_interrupt:
prefetch_abort:
data_abort:
not_used:
irq:
fiq:
二:uart_init代码如下:
typedef volatile unsigned int u32;
typedef volatile unsigned short u16;
typedef volatile unsigned char u8;
#define GPACON *(u32 *)0x7F008000
#define ULCON0 *(u32 *)0x7F005000
#define UCON0 *(u32 *)0x7F005004
#define UTRSTAT0 *(u32 *)0x7F005010
#define UTXH0 *(u8 *)0x7F005020
#define URXH0 *(u8 *)0x7F005024
#define UBRDIV0 *(u32 *)0x7F005028
#define UDIVSLOT0 *(u32 *)0x7F00502C
void putchar(char data);
void puts(char *data);
char getchar();
int gets(char *data);
int strcmp(char *src1, char *src2);
void printf(char *, ...);
void _start()
{
GPACON &= ~0xff;
GPACON |= 0x22;
ULCON0 = 3;
UCON0 = (2 << 10)|5;
UBRDIV0 = 34;
UDIVSLOT0 = 0xdddd;
///////////
char buf[512];
int ret;
while (1)
{
printf("myboot # ");
ret = gets(buf);
if (ret <= 0)
continue;
if (strcmp(buf, "exit") == 0)
break;
printf("%s\n", buf);
}
}
void print_int(int val)
{
if (val <= 0)
return;
print_int(val/10);
putchar(val%10 + '0');
}
void print_hex(int val)
{
int i, tmp;
putchar('0');
putchar('x');
for (i = 7; i >= 0; i--)
{
tmp = (val >> (i * 4)) & 0xf;
if (tmp < 10)
putchar('0' + tmp);
else
putchar('a' + tmp -10);
}
}
void printf(char *cmd, ...)
{
int *addr = (void *)&cmd;
int num = 0;
while (*cmd)
{
while (*cmd && (*cmd != '%'))
putchar(*cmd++);
if (*cmd == '\0')
break;
cmd++;
num++;
switch (*cmd)
{
case 'c': putchar(*(char *)(addr+num));
break;
case 's': puts((char *)*(addr+num));
break;
case 'd': print_int(*(addr+num));
break;
case 'p': print_hex(*(addr+num));
break;
}
cmd++;
}
}
void putchar(char data)
{
while (!(UTRSTAT0 & (1 << 1)))
;
UTXH0 = data;
if (data == '\n')
putchar('\r');
}
void puts(char *data)
{
while (*data)
putchar(*data++);
}
char getchar()
{
char tmp;
while (!(UTRSTAT0 & 1))
;
tmp = URXH0;
if (tmp == '\r')
tmp = '\n';
putchar(tmp);
return tmp;
}
int gets(char *data)
{
char tmp, *p = data;
while (1)
{
tmp = getchar();
if (tmp == '\n')
break;
*data++ = tmp;
}
*data = 0;
return data-p;
}
int strcmp(char *src1, char *src2)
{
while (*src1 && *src2)
{
if (*src1++ != *src2++)
return 1;
}
if (*src1 || *src2)
return 1;
return 0;
}
三:测试结果如图:
打印出自己的标志!!后续添加命令都考这个了,目前不做命令的添加,还有其他模块没有添加进去!!!
下期预告:
lcd显示
- 第四步:串口(基于飞凌6410的开发板)
- 第二步:系统时钟初始化(基于飞凌6410的开发板)
- 第三步:内存初始化(基于飞凌6410的开发板)
- 基于STM32神舟系列开发板的串口通…
- 基于ARM开发板的简单串口服务器
- 基于串口的Modbus软件开发
- 基于VC++开发串口通信的方法
- 基于对话框的API串口软件开发
- 基于VS2010的MFC串口开发
- 基于VC++开发串口通信的方法
- Android 基于Google API的串口开发
- linux 串口初始化 基于FL2440开发板
- 第四步 Javaweb开发之HTTP协议
- 开发ASP.NET博客的第四步——用VS2005建立解决方案(二)(转)
- 开发ASP.NET博客的第四步——用VS2005建立解决方案(一)(转)
- Android底层开发(二)之编写调用JNI层的java库 第四步
- flask web开发:主程序从单文件到多文件的转化——第四步
- x210v3开发板u-boot-2012.10移植之七---六步轻松搞定串口初始化
- 一些实用的小技术,不定时更新^_^
- PHP+ajax注册进度条验证代码
- 关于exec的例子
- SetWindowsHookEx
- javascript+css好多网站用的选星星实现打分功能的函数
- 第四步:串口(基于飞凌6410的开发板)
- javascript笔记
- DLL(Dynamic Link Libraries)专题
- 构建自己的Android代码托管服务器
- VBA中Option的四种用法
- 改hosts,屏蔽youku与tudou的广告
- あままみ2/Sweet Mami2 我的麻美学姐不可能那么H 2 汉化补丁
- Mybatis3 generator sqlserver 配置详解及应用工具 下载
- 软件开发十三种文档格式