硬件平台:JZ2440

实现功能:向串口软件实现输出putchar函数

start.s   --> 设置堆栈,关闭看门狗,初始化时钟,初始化sdram

init.c      -->初始化函数

uart.c    -->初始化串口寄存器

uart.h    -->

main.c  -->

start.s源码:

.extern main
.text
.global _start
_start:
ldr sp,=
bl watchdog_init
bl clock_init
bl sdram_init
bl copy_steppingstone_to_sdram
ldr pc,=sdram
sdram:
ldr sp,=0x34000000
ldr lr,=main_return
ldr pc,=main
main_return:
b main_return

init.c 源码:

//watchdog
#define WTCON (*(volatile unsigned long *)0x53000000) //clock
#define LOCKTIME (*(volatile unsigned long *)0x4c000000)
#define MPLLCON (*(volatile unsigned long *)0x4c000004)
#define CLKDIVN (*(volatile unsigned long *)0x4c000014) //sdram
#define BWSCON (*(volatile unsigned long *)0x48000000)
#define BANKCON0 (*(volatile unsigned long *)0x48000004)
#define BANKCON1 (*(volatile unsigned long *)0x48000008)
#define BANKCON2 (*(volatile unsigned long *)0x4800000c)
#define BANKCON3 (*(volatile unsigned long *)0x48000010)
#define BANKCON4 (*(volatile unsigned long *)0x48000014)
#define BANKCON5 (*(volatile unsigned long *)0x48000018)
#define BANKCON6 (*(volatile unsigned long *)0x4800001c)
#define BANKCON7 (*(volatile unsigned long *)0x48000020)
#define REFRESH (*(volatile unsigned long *)0x48000024)
#define BANKSIZE (*(volatile unsigned long *)0x48000028)
#define MRSRB6 (*(volatile unsigned long *)0x4800002c)
#define MRSRB7 (*(volatile unsigned long *)0x48000030) void watchdog_init(void)
{
WTCON=;
} void clock_init(void)
{
CLKDIVN=0x03;
__asm__
(
"mrc p15,0,r1,c1,c0,0\n"
"orr r1,r1,#0xc0000000\n"
"mcr p15,0,r1,c1,c0,0\n"
);
MPLLCON=((0x5c<<)|(0x01<<)|(0x02));
} void sdram_init(void)
{
volatile unsigned long *sdram_base=(volatile unsigned long *)0x48000000;
sdram_base[] = 0x22011110;
sdram_base[] = 0x00000700;
sdram_base[] = 0x00000700;
sdram_base[] = 0x00000700;
sdram_base[] = 0x00000700;
sdram_base[] = 0x00000700;
sdram_base[] = 0x00000700;
sdram_base[] = 0x00018005;
sdram_base[] = 0x00018005;
sdram_base[] = 0x008C04F4;
sdram_base[] = 0x000000B1;
sdram_base[] = 0x00000030;
sdram_base[] = 0x00000030; } void copy_steppingstone_to_sdram(void)
{
unsigned int *sour=(unsigned int *)0x00000000;
unsigned int *dest=(unsigned int *)0x30000000; while(sour<=(unsigned int *))
{
*dest++=*sour++;
}
}

uart.c 源码:

//uart
#define ULCON0 (*(volatile unsigned long *)0x50000000)
#define UCON0 (*(volatile unsigned long *)0x50000004)
#define UFCON0 (*(volatile unsigned long *)0x50000008)
#define UMCON0 (*(volatile unsigned long *)0x5000000c)
#define UTRSTAT0 (*(volatile unsigned long *)0x50000010)
#define UERSTAT0 (*(volatile unsigned long *)0x50000014)
#define UTXH0 (*(volatile unsigned char *)0x50000020)
#define URXH0 (*(volatile unsigned char *)0x50000024)
#define UBRDIV0 (*(volatile unsigned long *)0x50000028) //GPH
#define GPHCON (*(volatile unsigned long *)0x56000070)
#define GPHDAT (*(volatile unsigned long *)0x56000074)
#define GPHUP (*(volatile unsigned long *)0x56000078) void uart0_init(void)
{
GPHCON|=0xa0;
GPHUP=0x0c; ULCON0=0x03;
UCON0=0x05;
UFCON0=0x00;
UMCON0=0x00;
UBRDIV0=((/(*))-);
} unsigned char getc(void)
{
while(!(UTRSTAT0 & 0x01));
return URXH0;
} void putc(unsigned char date)
{
while(!(UTRSTAT0 & 0x02));
UTXH0=date;
}

uart.h 源码:

#ifndef _UART_H_
#define _UART_H_ void uart0_init(void);
unsigned char getc(void);
void putc(unsigned char date); #endif

main.c 源码:

#include"uart.h"

int main(void)
{
uart0_init();
while()
putc(getc()+);
return ;
}

连接脚本uart.lds :

SECTIONS
{
. = 0x30000000;
.text : {*(.test)}
.rodata : {*(.rodata)}
.dtat : {*(.data)}
.bss : {*(.bss) *(COMMON)} }

Makefile:

objs:= start.o init.o uart.o main.o 

uart.bin:$(objs)
arm-linux-ld -Tuart.lds -o uart_elf $^
arm-linux-objcopy -O binary -S uart_elf $@
arm-linux-objdump -D -m arm uart_elf > uart.dis %.o:%.s
arm-linux-gcc -o $@ -c $< %.o:%.c
arm-linux-gcc -o $@ -c $< clean:
rm -f *.o *.bin *.dis uart_elf

uarts裸机程序的更多相关文章

  1. 基于KEIL4开发ARM9(S3C2440)的裸机程序

    本文主要介绍如何使用Keil4开发ARM9(S3C2440)裸机程序. 说明: 一.平台: 操作系统:Windows XP系统 KEIL版本:4.73 开发板:ARM9(S3C2440) 二.建立工程 ...

  2. ubuntu15.10跑裸机程序跑.bin文件

    1:安装tftp:#apt-get update#apt-get install tftp-hpa tftpd-hpa xinetd2:#cd /srv#mkdir tftp#chmod 777 tf ...

  3. EB-SAM9G45裸机程序下载方法

    开发板:EB-SAM9G45 这里提供一种裸程序下载的方法. 在官方提供的下载方法中有手动下载和自动下载,它们都离不开SAM-BA软件,而该软件使用比较麻烦,而且操作不当很容易导致电脑蓝屏,还有一个很 ...

  4. s3c2440 lcd 显示图片裸机程序

    因为前面的裸机程序非常的简单,就不写博了. 程序的流程: 1,初始化C SP 2,关看门狗 3,初始化SDRAM 4,读出 NAND FLASH 中的 包含图片的程式放到SDRAM里面 5,跳转到SD ...

  5. ARM入门实践(一)----Mini6410上最简单的LED点灯裸机程序

    Mini6410上最简单的LED点灯裸机程序 : 实验环境: 根据友善教程,要用ADS,据说现在都不用这个了,但是为了打开友善给的mcp工程,就下了一个,Win7下弄上兼容模式和管理员权限,再下一个S ...

  6. JZ2440学习笔记之第一个裸机程序(Keil-MDK)

    CPU:S3C2440, ARM920T, Internal 4KB RAM, Support boot from NAND flash, 128MB for each bank. JZ2440:Me ...

  7. freeRTOS与裸机程序相比有什么区别??

    FreeRTOS命名及变量规则 初学FreeRTOS的用户对其变量和函数的命名比较迷惑,    FreeRTOS的核心源代码遵从MISRA编码标准指南,关于MISRA编码标准,可以查看文章https: ...

  8. MDK972-EK开发板裸调试设置和裸机程序烧写(转)

    硬件平台:MDK972-EK开发板编译调试软件:KEIL uVision4仿真工具:JLINK V7/V8   本例子从串口输出信息,如图:       KEIL uVision4调试设置如图所示: ...

  9. JZ2440学习笔记之通过J-Link单步裸机程序(Keil+J-Link)

    我们还是使用JZ2440学习笔记之第一个裸机程序(Keil-MDK)里面的程序,但是把延时拿掉,要不然单步的时候一直在delay里面: int main(void) { // Set GPF4/5/6 ...

随机推荐

  1. Java知多少(97)绘图模式概述

    绘图模式是指后绘制的图形与早先绘制的图形有重叠时,如何确定重叠部分的颜色.例如,后绘制的覆盖早先绘制的:或者后绘制与早先绘制的两种颜色按某种规则混合.主要有正常模式和异或模式两种:正常模式是后绘制的图 ...

  2. H3C S5120-52P-WiNet交换机配置

    配置console口登录验证密码 <H3C>system-view [H3C]user-interface aux 0 [H3C-ui-aux0]authentication-mode p ...

  3. 爱快路由计费系统easyradius隆重发布,支持V2版本,欢迎大家测试使用

    随着PA.BV接口的发布的临近,我们已经对ROS及爱快V2接口进行大量的升级工作 经用户测试,各方便已满足用户需求. 其实很早以前我们就有支持爱快路由的打算,但是由于各方便原因,通讯接口做好了,但是并 ...

  4. 利用反射将Model转化为sql

    public string GetInsertSqlByModel(Object o) { StringBuilder sbStart = new StringBuilder(); StringBui ...

  5. [React] 09 - Tutorial: components

    jsx变为js的过程:http://babeljs.io/repl/ youtube: https://www.youtube.com/channel/UCA-Jkgr40A9kl5vsIqg-BIg ...

  6. NLog类库的使用探索——认识配置+实习小感悟

    1 写在前面 1.1 为什么学了软件 1.高考失败,分数不高,不能随心所欲 2.农村孩子,学点技术,将来有口饭吃 3.有科技含量,想玩电脑(那个时候是这么想的,那个时候觉得学计算机就是玩电脑) 1.2 ...

  7. QT下载区

    http://download.qt.io/archive/qt/ 下载总网址: http://download.qt.io/ http://mirrors.hust.edu.cn/qtproject ...

  8. 正则表达式/(^\s*)|(\s*$)/g意思

    包含以空格.回车符等字符开头 或者 空格.回车符等字符结尾 的字符串,可过滤出所有空格.回车符的字符

  9. I - Cows

    来源 poj 3348 Your friend to the south is interested in building fences and turning plowshares into sw ...

  10. Win 10 计算机管理失效(Windows找不到文件“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Computer Management.lnk)

    Windows找不到文件“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\Computer Mana ...