机械与电子工程学院。
嵌入式系统作业。
姓名:姚磊。
班级:11自动化二班。
学号:2011080761
#defineflash_erase(addr)d_macro_begin \
flkey= 0xa5; \
flkey= 0xf1; \
psctl = 0x03; \
addr= 0x00; \
psctl= 0x00; \
d_macro_end
** 写入flash一个字节*/
#defineflash_write(addr, x)d_macro_begin \
flkey= 0xa5; \
flkey= 0xf1; \
(addr)= x; \
d_macro_end
** 串口查询方式发送一字节数据*/
#defineuart_putch(dat)d_macro_begin \
sbuf1 = dat; \
while ((scon1&0x02) =0);
scon1 &=0xfd; \
d_macro_end
#defined_app_start0x0000// app区起始地址。
#defined_app_limit0xee00// app区结束地址。
#defined_run_address0xee00// app运行地址(只使用3byte)
#defined_boot_addr0xf000// boot程序存储地址。
#defined_boot_limit0xf800// boot区结束地址。
#defined_flash_limit0xfa00// flash可操作区结束地址。
** 本地变量*/
uint8rst_addr[3];/用以保存启动向量。
uint8xdata*pwrite;//指向**区的指针。
uint8code*pread;//指向**区的指针。
uint8dat;
** funcrtload
@brief载入函数。
static void
rtload(void)
uint8dat, tmp[4];
uint16i, size, dncs, checksum;
uart_print(">start erasing flash...n");
** 1. 保存boot入口地址, 最后回写 */
pread = 0;
rst_addr[0] =pread++;
rst_addr[1] =pread++;
rst_addr[2] =pread++;
** 2. 准备扇区 */
for (pwrite=0; pwriteflash_erase(pwrite);
pwrite= d_run_address;//启动参数区。
flash_erase(pwrite);
uart_print(">erasing complete.");
** 3. 回写boot入口地址 */
psctl= 0x01;
pwrite= 0;
flash_write(pwrite++,rst_addr[0]);
flash_write(pwrite++,rst_addr[1]);
flash_write(pwrite++,rst_addr[2]);
** 4. 通知主机发送** */
scon1|= b_ren1;
uart_print(">please transmit bin file...n");
** 5. 读接收数据长度 */
for (i=0; i<4; i++)
while ((scon1&0x01) =0);
scon1 &=0xfe;
tmp[i] =sbuf1;
size = tmp[1]<<8)+tmp[0]) 4 - 2;
if (size > d_app_limit) {
psctl= 0x00;
uart_print(">error: no enough space for your app!");
return;
** 6. 开始接收数据, 同时写入flash app区*/
checksum= 0;
pwrite= d_run_address;//启动地址(3byte)
for (i=0; i<3; i++)
while ((scon1&0x01) =0);
scon1 &=0xfe;
dat = sbuf1;
checksum +=dat;
flash_write(pwrite++,dat);
pwrite= 3;//程序区。
for (i=3; iwhile ((scon1&0x01) =0);
scon1 &=0xfe;
dat = sbuf1;
checksum +=dat;
flash_write(pwrite++,dat);
psctl= 0x00;//禁止flash操作。
** 7. 读校验和 */
for (i=0; i<2; i++)
while ((scon1&0x01) =0);
scon1 &=0xfe;
tmp[i] =sbuf1;
dncs = tmp[1]<<8) +tmp[0];
uart_print(">transmit complete.");
** 8. 校验数据*/
if (dncs !=checksum) {
uart_print(">checksum error!");
else {
uart_print(">programming complete.");
uart_print(">you h**e to restart the device to use the new firmware.");
voidmain(void)
uint8dat;
uint16timeout;
void (*boot)( void);
init_device();初始化设备。
flscl= (flscl&0xf0) |0x09);/设置flash预分频器。
pfe0cn= pfe0cn & 0xfe;//flash按字节写入。
/ 此处读取loader使能按键。
if (1) {用户设置为**模式。
** 创建握手过程*/
uart_print("");
uart_printzboot v1.4.2n");
uart_print(">please press 's' to start programming.");
while (1) {
/ 此处判断读入's'
if ("键入正确")
rtload();download
else if ("超时")
goto boot_out;
boot_out:
pread = d_run_address;
if (*pread !=0x02) {
uart_print(">error: no app program for run!");
while (1);
boot = d_run_address;
*boot)()
嵌入式ARM嵌入式系统设计
摘要 本系统设计了基于arm系统的嵌入式硬件平台,其中主要介绍了系统母版的具体电路实现,其硬件电路已经通过了信号完整性分析。中国 网 关键词 arm 嵌入式系统 中图分类号 tp368.1 文献标识码 a 文章编号 1007 9416 2012 12 0104 01 1 序言 本系统是设计一款基于a...
嵌入式系统
期末作业考核。满分100分。一 判断题 每题3分,共30分 1.嵌入式系统中的软件系统主要由嵌入式操作系统和应用软件组成,其中嵌入式微处理器属于嵌入式软件系统的核心。答 错。2.运行在智能手机或平板电脑中的android系统是一种嵌入式操作系统。答 对。3.windriver公司所提供的软件开发包是...
嵌入式系统
关于嵌入式系统 献给热爱此道的初学者们前言。网上看到众多网友都问了关于嵌入式系统方面的很多问题,很多都可在这里找到答案,希望我的这篇文章能给他们以启发。也请大家不要轻易 一 嵌入式系统的概念。着重理解 嵌入 的概念。主要从三个方面上来理解。1 从硬件上,将基于cpu的处围器件,整合到cpu芯片内部,...