6410裸机LED独立完整程序
ARM11 6410--Arm裸机程序开发演示

ADS+USB
1、HOST操作系统:Windows 2、编译器:armcc 3、IDE:ADS 4、适用CPU:ARM10/ARM11 5、HOST硬件接口:USB接口的J-Link 6、调试软件:AXD+J-LinK RDI 特点:需要特定的硬件仿真器(J-link),调试和下载速度较 快
RVDS+USB
--裸机程序需要直接操作硬件设备 --裸机程序一般采用少量汇编加C语言来编译 --如PC的BOIS就是裸机程序
Arm裸机程序
基于Arm的嵌入式系统一般都存在OS层,应用程序无需直接 操作硬件,Arm裸机程序的意义: --作为嵌入式系统的BOIS(Bootloader) --驱动开发 --硬件验证 --Arm汇编、硬件控制教学
裸机程序分析
LED接口电路
裸机程序分析
LED占用资源
裸机程序分析
端口地址
裸机程序分析
控制位定义
裸机程序分析
数据位定义
编译验证
使用ADS将源程序编译成bin格式的裸机可执行程序
使用DNW通过USB下载到开发板运行
确认LED1-4流水灯闪烁
每日实验
<<嵌入式Linux开发环境实验手册>> 实验2-1 Arm裸机程序开发
课程安排
什么是裸机程序 Arm裸机开发流程 Arm裸机开发环境 Arm裸机开发示例
交叉开发模型
在嵌入式开发过程中有宿主机和目标机的角色之分 • 宿主机是编译嵌入式软件的计算机 • 目标机是运行嵌入式软件的硬件平台
总体流程
编码‐‐>编译‐‐>调试‐‐>下载
编码
1、编码即是编写源文件 --汇编程序 --C语言程序 2、编码工具采用文本编辑器或相应IDE均可 --UltraEdit、Souce Insight --vi、vim --ADS、RVDS
嵌入式点亮一个LED灯的程序-推荐下载

int main(void) {
RCC_Configuration(); GPIO_Configuration();
/* PF6 引脚输出高电平,点亮 EM-STM3210E 开发板上的 LED 灯 D1 */ GPIO_WriteBit(GPIOF, GPIO_Pin_6, Bit_SET);
/* Private function prototypes ----------------------------------------------*/ void RCC_Configuration(void); void GPIO_Configuration(void);
/* Private functions ---------------------------------------------------------*/
for(i=0; i<4; i++) {
rGPMDAT = ~(1<<i); msDelay(10); }
} } void Main(void) {
GPIO_Init(); LedTest(); }
(*(volatile unsigned *)(0x7F008820)) (*(volatile unsigned *)(0x7F008824)) (*(volatile unsigned *)(0x7F008828))
/* Infinite loop */ while (1) { } }
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
Mini6410上最简单的LED点灯裸机程序

Mini6410上最简单的LED点灯裸机程序说明:该程序是适用于Mini6410开发板,是一个很小的裸机程序,基开发平台为ADS,主要功能是点亮LED并驱动串口输出,程序运行后,板上的LED将会出现“对对碰”显示效果,同时从串口0打印“Hello, Mini6410”, 目标可执行文件可以被烧写到Nand Flash的Block0运行,也可以烧写至普通的SD卡运行使用,可以称之为Bootloader的雏形,本程序由友善之臂制作提供,转载请注明出处。
下面是编译和使用步骤(基于WindowsXP);1.使用ADS打开mini6410‐led.mcp项目文件2.按F7或点编译按钮编译,将生成mini6410‐led.bin编译结果:最后生成mini6410‐led.bin3.烧写到Nand Flash运行要把mini6410‐led.bin烧写到Nand Flash,需要借助已经安装了Superboot的SD卡,步骤如下:把mini6410‐led.bin拷贝到SD卡的images目录下打开FriendlyARM.ini配文件,修改如下关键定义:Action=installOS= UserBinUserBin‐Image=mini6410‐led.bin4.下载到内存中运行借助已经安装了SuperbootSD卡,可以把把mini6410‐led.bin加载到内存中运行,步骤如下: 把mini6410‐led.bin拷贝到SD卡的images目录下,打开FriendlyARM.ini配文件,修改如下关键定义:Action=runOS= UserBinUserBin‐Image=mini6410‐led.binUserBin‐StartAddress=50000000附1:串口输出结果:附2: mini6410‐led主体程序代码:#include "utils.h"static void LedDelay(void){volatile unsigned int k;for(k = 0; k < 20000000; k++);}int main(void){Uart_Init();Port_Init();Uart_SendString("\r\nHello, Mini6410\r\n");for(;;) {Led_Display(0x9); // 1001 LedDelay();Led_Display(0x6); // 0110 LedDelay();}return 0;}。
OK6410裸机调试

10-5 10-6 10-7 10-8 第十一章 11-1 11-2 11-3 11-4 11-5 11-6 11-7 11-8 第十二章 12-1 12-2 12-3 12-4 12-5 12-6 12-7 12-8 第十三章 13-1 13-2 13-3 13-4 13-5 13-6 13-7 13-8 第十四章
OK64பைடு நூலகம்0
RVDS 调试手册
目录
第一章 第二章 2-1 第三章 第四章 第五章 5-1 5-2 第六章 6-1 OK6410 简介 ..................................................................................................................... 6 安装 RVDS2.2 开发环境.................................................................................................. 9 安装 RVDS2.2 到 Windows XP 中.................................................................................. 9 JLINK 驱动的安装..........................................................................................................16 JLINK 的连接方法..........................................................................................................21 RVDS2.2 介绍..................................................................................................................22 RVDS 开发工具介绍...................................................................................................... 22 集成开发环境(IDE) ...................................................................................................22 RVDS2.2 的使用方法以及调试方法、调试的原理 ................................................... 23 CodeWarrior for RVDS....................................................................................................23 6-1-1 打开 CodeWarrior................................................................................................23 6-1-2 新建 OK6410 裸机工程的方法.........................................................................24 6-1-3 为工程添加源码文件 ......................................................................................... 29
6410裸机串口0独立完整程序

//根据网上资料自己整里出来的tiny6410的串口程序,去掉了不相关的文件影响!只写了三个接口函数,Uart_Init();Uart_SendByte('a');Uart_SendString("hello ting6410Uart");分别为初始化串口,发送一个字符和发送一个字符串,在自定义的主函数是调用即可。
Tiny6410 1111 版本亲测可用,其他6410 的板也应该可用所有的代码在下面贴出,注意是分了好几个文件的,并加上了注释,方便和我一样的6410爱好者学习和分享!--L YQGXH//***************************************************************************//startup.o 文件//***************************************************************************;----------------------------; lyqgxh make; for the FriendARM Tiny6410 1111 board;--------------------------------;------------------------------IMPORT main ;C enterpoint;----------------------------------;Memory Start Entry;---------------------------------PRESERVE8AREA |C$$code|, CODE, READONL Yglobal MemStartMemStart;-------------------------------; Disable WatchDog Timer;-------------------------------ldr r0,=0x7e004000ldr r1,=0x0str r1,[r0];---------------------------;Enable VIC Port;---------------------------mrc p15,0,r0,c1,c0,0orr r0,r0,#(1<<24)mcr p15,0,r0,c1,c0,0;-----------------------------;jamp to main;-----------------------------b mainDCB "L YQLOGXH"END//***************************************************************************** //tiny6410utils.c文件//***************************************************************************** #define rGPACON *((volatile unsigned *)0x7f008000)#define rGPAPUD *((volatile unsigned *)0x7f008008)#define rULCON0 *((volatile unsigned *)0x7f005000)#define rUCON0 *((volatile unsigned *)0x7f005004)#define rUFCON0 *((volatile unsigned *)0x7f005008)#define rUMCON0 *((volatile unsigned *)0x7f00500c)#define rUBRDIV0 *((volatile unsigned *)0x7f008028)#define rUDIVSLOT0 *((volatile unsigned *)0x7f00802c)#define rUTRSTAT0 *((volatile unsigned *)0x7f005010)#define rUTXH0 *((volatile unsigned *)0x7f005020)static void Delay(void){volatile int i;for(i=0 ; i < 1000 ; i++){}}void Uart_Init(void){//uart io port initialize (RXD0:GPA0 TXD0:GPA1)rGPACON=(rGPACON&~(0xff))|(0x22<<0);//0000 0000 0010 0010rGPAPUD=(rGPAPUD&~(0xff))|(0x1<<0);//RXD0 pull down tx disable//Initialize UART CH0//0000 0000 0000 0011 位个数为8位一个停止位,无奇偶校验,普通模式rULCON0=(0<<6)|(0<<3)|(0<<2)|(3<<0);// 0000 0011 0000 0101 中断或者轮询方试接收和发送缓存寄存器的数据//禁止进入环模式,触发中断,以pclk作为波特率时钟rUCON0=(0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);//禁止FIFOrUFCON0=(0<<6)|(0<<4)|(0<<2)|(0<<1)|(0<<0);//AFC 禁止rUMCON0=(0<<5)|(0<<4)|(0<<0);//rUBRDIV0=35;//0x23 43500000/(115200)*16-1rUDIVSLOT0=0x80;//???}void Uart_SendByte(int data){while(!(rUTRSTA T0&0x2)); //等待THR 清空Delay();rUTXH0=(unsigned char)data;}void Uart_SendString(char *pt){while(*pt)Uart_SendByte(*pt++);}//************************************************************************ //tiny6410utils.h文件//************************************************************************* extern Uart_Init(void);extern Uart_SendByte(int data);extern Uart_SendString(char *pt);//************************************************************************* //main.c文件,只作为例子,自己根据需要改写!//************************************************************************* #include "tiny6410utils.h"void main(){Uart_Init();Uart_SendByte('a');Uart_SendString("hello Uart");while(1);}。
OK6410裸机程序---hello world

OK6410 裸机程序---hello world上面已经解决了几个问题。
现在我们的状态:可以在PC -OK6410 之间进行tftp 传输,确定了一下可用的地址空间,下面我们来说一下printf 调试、因为没有jlink,只能用printf 调试,你也许会问,我们自己实现printf 么?答曰:不是,我们只是弄个hello world,何必那么认真呢?printf 函数是uboot 实现的,我们只需要调用就行了。
当然了,这个首先得到你uboot 的printf 函数地址。
这需要你自己编译uboot,因为每个人的printf 函数地址不一定一样。
查看System.map 文件,找到printf 地址。
就行了。
调用时我们可以这样用:void (*show)(char*,...) = 0xc7e11650;........show(“hello world/n”);.......现在我们来个hello world 的例子:贴一下代码:void (*show)(char *,...) = 0xc7e11650;int main(void){ show(“hello world./n”); return 0;}(hello.c)就这么简单。
(一个hello world 能多复杂啊?嘎嘎~)下面我们来说一下编译和连接:你也会用:arm-linux-gcc hello.c 但是这是不对的,为什么呢?我们来仔细想一个问题,我们是裸机(好吧,我承认稍微穿了一点),没有操作系统。
想想arm 执行时,它希望执行的第一条指令是什么?肯定是一条有效的指令了。
但是我们生成的这个a.out 的前面是有效的可执行的语句么?也许你已经想到了,它的头不是什么有效指令,是ELF 头信息,还有你的用户名呢,用户名不能执行吧?呵呵,开玩笑。
还有一个问题。
gcc 默认的连接地址是你想要的么?八成不是吧。
鉴于以上原因我们要分步进行:1:编译arm-linux-gcc -c hello.c -o hello.o 生成hello.o 文件。
OK6410的裸机调试_不用Jlink

OK6410的裸机调试(不用Jlink)废话不多说,直接进入主题。
有两种方法写入,一种是从sd卡启动,一种是从nand flash中启动。
方法一:用sd卡启动我们的裸机程序用到的软件:WinHex_14.0_SR-1_SC.exe首先在RVDS上编译裸机代码,RVDS的设置可以参考我的设置,(好像不这么设置也可以成功)我的这项设置输出的是文件名为zImage的二进制代码文件。
注意是zImage!!没有.bin!之后一种方法就用到它,暂且先说了吧。
插入已经格式化的SD卡,打开WinHex_14.0_SR-1_SC.exe这个软件。
S3C6410 SD 启动模式原理: 上电后,CPU自动将SD0丛最后0x23FF 处,连续8KB数据读到内部SRAM 0x0C000000处执行.就这样,我们的裸奔程序就写到SD卡中了,把OK6410设置为SD卡启动,就可以看到我们的裸机程序在运行了!方法二:借助uboot把我们的裸机程序从nand flash中启动起来!我们一键烧写的方法,将SD做一些准备。
打开SD_Writer.exe然后把uboot.bin拷贝到H盘中(SD卡的盘符)可以用位于OK6410-A 6410官方基础资料-2G\linux2.6.28\demo下的uboot.bin 接下来把我们刚刚生成的裸机目标文件“zImage”拷贝到SD卡中。
设置OK6410为SD卡启动,用dnw观察打印的信息,看到此信息就说明烧写完成了。
完成后把板子设置为nandflash启动,就可以“裸奔”了看到这个信息就说明你的裸机程序在执行了总结方法一借鉴了别人的想法,方法二是本人自己摸索出来的!大家一起学习,一同进步!DIY爱好者2011年6月20日。
光感报警器裸机程序

6410开发板--光感控制裸机程序
系统功能说明
6410开发板通电后初始化系统相关硬件,控制程序能读取光感器的数据,并根据数据做出报警处理。
用户按键能设置光感启用或禁用,LED灯能指示程序工作情况,具体功能说明如下:
●LED1号灯为系统工作指示灯,间隔闪亮代表程序工作正常,灯灭或灯亮代
表程序死机异常。
●LED2号灯为光感器设置灯,亮代表光感器启用,灭代表禁用。
●LED3号灯为按键工作指示灯,当按键按下时灯亮,否则灯灭。
●LED4号灯为光线报警指示灯,光线不足时亮,否则灯为灭。
●KEY1号键为光感器启用键。
●KEY2号键为光感器禁用键。
●蜂鸣器为光线报警器,当光线不足时鸣响。
程序要求使用ARM汇编指令实现。
系统硬件资源说明
1.光线传感器原理图
2.开发板SCON接口
为了方便开发一些串行口外设,我们特意设计了SCON接口,并称之为“串行口总汇”,它包含2个串口,1个I2C接口,1个SPI接口,1个USB Host接口,还有1个GPIO口等,并包含5V和3.3V电源输出脚,如图(右侧为SCON接口的机械尺寸图):
3.LED接口说明
4.按键接口说明
5.蜂鸣器接口说明。