嵌入式系统

发布 2022-10-21 06:14:28 阅读 9786

机械与电子工程学院。

嵌入式系统作业。

姓名:姚磊。

班级: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芯片内部,...