S3C44B0 调试笔记(1)

合集下载

ARM7(sc44b0)外部中断笔记

ARM7(sc44b0)外部中断笔记

ARM7(sc44b0)外部中断笔记对于sc44b0它也是一种单片机,一种比较高级的单片机而已,所以他也跟51单片机一样有外部中断,不同51单片机的是,他有8个外部中断源,对应的是8个管脚,(51只有两个,int0和int1,P3.3和P3.4),分别是Port G八个管脚。

而对于外部中断4 \5\6\7很多都是共用寄存器,他们是通过或逻辑公用一个中断请求线。

下面就具体来说说使用外部中断的一些必要的配置。

一,对管脚的配置,因为Port G有三种功能用法,要通过对rPCONG(端口G配置寄存器)的配置来选用Port G的外部中断的功能。

其配置表如下所以应该将其配置为11(设置为中断功能状态);二,中断模式的选择,中断模式有两种,FIQ(快速中断模式)和 IRQ(中断模式)两种,一般没有特殊要求都用IRQ模式即可。

可以通过对中断模式寄存器rINTMOD配置获得。

如表下三,是否允许中断,即中断使能位。

通过对中断控制寄存器INTCON的配置即可,如表下通过对中断控制寄存器的配置即可,可以看出只要让intcon的【1】位置零即可使中断使能。

四,外部中断方式的选择,低电平或上升沿触发呢,还是别的,这就要对外部中断方式寄存器(EXTINT)的配置,其表如下由上表可知,如果要用下降沿触发,就可将EXTINT 的值给0x22222222;将所有的外部中断都设置为下降沿触发。

五,当中断捕抓到以后,要引起什么变化呢?或者说用什么来捕抓呢?在sc44b0中用了两个寄存器来捕抓,一个中断挂起寄存器(INTPND),和外部中断挂起寄存器(EXINTPND),一开始不明白挂起是什么意思,后来才懂,差不多就相当与51单片机的标志位一样,当中断发生后,就将挂起寄存器的对应的某一位置一或置零,外部中断挂起寄存器如表下中断挂起寄存器:当中断产生后,是将INTPND的【21】位置一的;所以,判断有无外部中断,就可以通过读取挂起寄存器对应的为,即可知道是否有无中断。

S3C44B0的初始化程序的理解

S3C44B0的初始化程序的理解

S3C44B0的初始化程序的理解S3C44B0的初始化程序就是初始化各个关键的寄存器,建立中断向量,然后转移到主函数去执行程序。

不过S3C44B0不支持地址映射,所以程序不COPY到RAM种执行。

S3C44B0初始化对我们广大初学者来说,比较难理解的是中断的处理和一些少见的操作符号,S3C44B0的中断子程序地址存放在初始化程序最后就是HandleADC # 4HandleRTC # 4HandleUTXD1 # 4HandleUTXD0 # 4HandleSIO # 4HandleIIC # 4HandleURXD1 # 4HandleURXD0 # 4这一段,它的其实地址是ISR_STARTADDRESS,个人写中断程序的时候,子程序地址被编译器连放在相应的位置。

初始化完成后,程序转通过BL Main 转到用户定义的主程序上执行。

以下是我个人的一些理解,有错误的地方希望大家指出来。

GBLL THUMBCODE[ {CONFIG} = 16THUMBCODE SETL {TRUE}CODE32|THUMBCODE SETL {FALSE}][ THUMBCODECODE32 ;for start-up code for Thumb mode]×××××××××××&ti mes;××××××××××&times ;其中[=IF ,|=ELSE ,]= ENDIF, CODE32 表明一下操作都在ARM状态。

S3C44B0 中文手册汇编

S3C44B0 中文手册汇编

1产品预览介绍三星的S3C44B0X 16/32位RISC处理器被设计来为手持设备等提供一个低成本高性能的方案。

S3C44B0X提供以下配置:2.5V ARM7TDMI 内核带有8Kcache ;可选的internal SRAM;LCD Controller(最大支持256色STN,使用LCD专用DMA);2-ch UART with handshake(IrDA1.0, 16-byte FIFO) / 1-ch SIO;2-ch general DMAs / 2-ch peripheral DMAs with external request pins;External memory controller (chip select logic, FP/ EDO/SDRAM controller); 5-ch PWM timers & 1-ch internal timer;Watch Dog Timer;71 general purpose I/O ports / 8-ch external interrupt source;RTC with calendar function;8-ch 10-bit ADC;1-ch multi-master IIC-BUS controller;1-ch IIS-BUS controller;Sync. SIO interface and On-chip clock generator with PLL.。

S3C44B0X采用一种新的三星ARM CPU嵌入总线结构-SAMBA2,最大达66MHZ。

电源管理支持:Normal, Slow, Idle, and Stop mode。

系统管理功能:1 Little/Big endian support.2 Address space: 32Mbytes per each bank. (Total 256Mbyte)3 Supports programmable 8/16/32-bit data bus width for each bank.4 Fixed bank start address and programmable bank size for 7 banks.5 . 8 memory banks.- 6 memory banks for ROM, SRAM etc.- 2 memory banks for ROM/SRAM/DRAM(Fast Page, EDO, and Synchronous DRAM)6. Fully Programmable access cycles for all memory banks.7 Supports external wait signal to expend the bus cycle.8. Supports self-refresh mode in DRAM/SDRAM for power-down.9. Supports asymmetric/symmetric address of DRAM.Cache 和内部存储器功能:• 4-way set associative ID(Unified)-cache with 8Kbyte.• The 0/4/8 Kbytes internal SRAM using unused cache memory.• Pseudo LRU(Least Recently Used) Replace Algorithm.• Write through policy to maintain the coherence between main memory and cache content.• Write buffer with four depth.• Request data first fill technique when cache miss occurs.时钟和电源管理• Low power• The on-chip PLL makes the clock for operating MCU at maximum 66MHz.• Clock can be fed selectively to each function block by software.• Power mode: Normal, Slow, Idle and Stop mode.Normal mode: Normal operating mode.Slow mode: Low frequency clock without PLLIdle mode: Stop the clock for only CPUStop mode: All clocks are stopped• Wake up by EINT[7:0] or RTC alarm interrupt fromidle mode.中断控制器• 30 Interrupt sources( Watch-dog timer, 6 Timer, 6 UART, 8 External interrupts, 4 DMA , 2 RTC, 1 ADC, 1 IIC, 1 SIO )• Vectored IRQ interrupt mode to reduce interrupt latency.• Level/edge mode on the external interrupt sources• Programmable polarity of edge and level• Supports FIQ (Fast Interrupt request) for very urgent interrupt request定时器功能• 5-ch 16-bit Timer with PWM / 1-ch 16-bit internal timer with DMA-based or interrupt-based operation• Programmable duty cycle, frequency, and polarity• Dead-zone generation.• Supports external clock source.RTC 功能:• Full clock feature: msec, sec, min, hour, day,week, month, year.• 32.768 KHz operation.• Alarm interrupt for CPU wake-up.• Time tick interrupt通用输入输出口功能:• 8 external interrupt ports• 71 multiplexed input/output portsUART 功能:• 2-channel UART with DMA-based or interrupt-based operation• Supports 5-bit, 6-bit, 7-bit, or 8-bit serial data transmit/receive• Supports H/W handshaking during transmit/receive• Programmable baud rate• Supports IrDA 1.0 (115.2kbps)• Loop back mode for testing• Each channel have two internal 32-byte FIFO for Rx and Tx.DMA控制器功能:• 2 channel general purpose Direct Memory Access controller without CPU intervention.• 2 channel Bridge DMA (peripheral DMA) controller.• Support IO to memory, memory to IO, IO to IO with the Bridge DMA which has 6 type's DMA requestor: Software, 4 internal function blocks (UART, SIO, Timer, IIS), andExternal pins.• Programmable priority order between DMAs (fixed or round-robin mode)• Burst transfer mode to enhance the transfer rate on the FPDRAM, EDODRAM and SDRAM.• Supports fly-by mode on the memory to external device and external device to memory t ransfer modeA/D 转换器:• 8-ch multiplexed ADC.• Max. 100KSPS/10-bit.LCD控制器:• Supports color/monochrome/gray LCD panel• Supports single scan and dual scan displays• Supports virtual screen function• System memory is used as display memory• Dedicated DMA for fetching image data from system memory• Programmable screen size• Gray level: 16 gray levels• 256 Color levels看门狗定时器:• 16-bit Watchdog Timer• Interrupt request or system reset at time-outIIC-BUS 接口• 1-ch Multi-Master IIC-Bus with interrupt-based operation.• Serial, 8-bit oriented, bi-directional data transfers can be made at up to 100 Kbit/s in the standard mode or up to 400 Kbit/s in the fast mode.IIS-BUS接口• 1-ch IIS-bus for audio interface with DMA-based operation.• Serial, 8/16bit per channel data transfers• Supports MSB-justified data formatSIO (同步串口):• 1-ch SIO with DMA-based or interrupt –based operation.• Programmable baud rates.• Supports serial data transmit/receive operations 8-bit in SIO.操作电压范围:• 核电压 : 2.5V I/O电压: 3.0 V to 3.6 V工作频率:• Up to 66 MHz封装:• 160 LQFP / 160 FBGA2管脚描述om[1:0]: 输入 om[1:0]设置S3C44B0X在测试模式和确定nGCS0的总线宽度,逻辑电平在复位期间由这些管脚的上拉下拉电阻确定.00:8-bit 01:16-bit 10:32-bit 11:Test modeADDR[24:0] 输出: 地址总线输出相应段的存储器地址.DATA[31:0] 输入输出:数据总线,总线宽度可编程为8/16/32 位nGCS[7:0] 输出:芯片选择,当存储器地址在相应段的地址区域时被激活.存取周期和段尺寸可编程.nWE 输出:写允许信号,指示当前的总线周期为写周期.nWBE[3:0] 输出: 写字节允许信号nBE[3:0] 输出:在使用SRAM情况下字节允许信号.nOE输出:读允许信号,指示当前的总线周期为读周期.nXBREQ 输入: nXBREQ 总线控制请求信号,允许另一个总线控制器请求控制本地总线,nXBACK信号激活指示已经得到总线控制权。

ARM开发板S3C44B0使用指南

ARM开发板S3C44B0使用指南

ARM开发板S3C44B0使用指南
一、关于开发板
S3C44B0是一款功能齐全的高性能ARM处理器开发板,采用ARM9内核,主频为80MHz,具备有256KBROM、32KBIRAM、128KBSRAM,其中
32KBIRAM处理器内部维持缓存,128KBSRAM处理器外部维持缓存。

它可以
简化开发过程,使用户易于掌握和熟悉该处理器的硬件结构,支持快速实
现功能。

二、开发板资源
1、主要开发板资源:
1.1、主处理器:ARM9处理器,主频80MHz。

1.2、存储器:256KBROM,32KBIRAM,128KBSRAM。

1.3、外设接口:UART,SPI,I2C,ADC,PWM,GPIO。

1.4、数字I/O端口:2个数字I/O口。

1.5、系统接口:JTAG系统接口支持调试,主频输入/输出(SIO),
复位输入/输出(RST),电源输入/输出(VIN),使能输入/输出(EN)。

1.6、外设接口:摄像头接口,LCD接口,USB,PS/2,SD卡接口,串
口打印机接口,外部存储器接口,外部中断接口,外部接口
(EINT0/EINT1/I2S)。

2、典型应用:
2.1、工业控制:采用S3C44B0的工业控制系统,可方便地实现复杂
的控制逻辑,实现连续的控制,获得快速、可靠的控制效果;
2.2、消息控制:采用S3C44B0的消息控制系统,可实现信息的广播、多用户聊天等;
2.3、办公设备:采用S3C44B0的设备。

S3C44B0功能模块

S3C44B0功能模块

输入输出参数
输入电压范围:3.3V或5V
输入频率范围:0-24MHz
添加标题
添加标题
输出电压范围:0-3.3V或0-5V
添加标题
添加标题
输出频率范围:0-24MHz
通信接口参数
UART:支持异步串行通信
SPI:支持同步串行外设接口
添加标题
添加标题
I2C:支持半双工同步串行通信
添加标题
添加标题
IrDA:支持红外通信
实际应用效果
嵌入式系统开发板 智能家居控制系统 工业自动化设备 医疗仪器仪表
应用经验分享
案例一:S3C44B0在智能 家居中的应用
案例二:S3C44B0在工业 控制中的应用
案例三:S3C44B0在医疗 设备中的应用
案例四:S3C44B0在智能 交通中的应用
07
S3C44B0模块发展与 展望
技术发展趋势
环境参数
工作温度范围:40℃~85℃
存储温度范围:50℃~100℃
湿度范围能力:符合 EIA RS-485标准
05
S3C44B0模块编程与 配置
编程语言与工具链
支持的语言:C、汇编 工具链:编译器、链接器、调试器 开发环境:Keil、SDT等 编程步骤:编写代码、编译、链接、调试
市场需求:随着物联网、智能家居等领域的快速发展,S3C44B0模块的市场需求持续增长。
技术创新:未来S3C44B0模块将不断进行技术创新,提高性能、降低成本,进一步拓展应用 领域。
竞争格局:市场竞争激烈,未来S3C44B0模块企业需要不断提高产品质量、降低成本,并积 极开拓新市场。
行业趋势:随着5G、AI等技术的普及,S3C44B0模块将迎来更多的发展机遇,未来市场前 景广阔。

基于S3C44BOX数模转换器的系统调试

基于S3C44BOX数模转换器的系统调试

基于S3C44BOX数模转换器的系统调试作者:朱璇,黄国开,源艳芬,孙周军来源:《科技资讯》 2011年第13期朱璇1 黄国开2 源艳芬1 孙周军1(1.广东省气象信息中心; 2.广东省防雷中心广州 510080)摘要:本章详细介绍了ARMSys的开发仿真调试过程。

介绍了BIOS的使用方法。

在SDT2.5下,利用一个简易的并口转JTAG口电路模块实现代码的下载与调试。

关键词:嵌入式 A/D数模转换 S3C44B0X SDT2.51中图分类号:O242 文献标识码:A 文章编号:1672-3791(2011)05(a)-0091-03嵌入式系统的应用日益广泛,可以说无处不在[1]。

完成S3C44B0X内部8路模拟信号输入的10位模/数转换器(ADC)的功能和逐次逼近式ADC的硬件电路和系统软件的编写及编译工作之后,就做硬件准备,然后在主机上运行JTAG.exe程序,通过设置ADW,开始进行系统的总体调试。

本论文主要介绍基于S3C44B0X的数模转换器的系统调试过程。

1 硬件准备在调试之前,如图1所示,先用并口电缆将PC机和ARM-Sys上的JTAG Module(模块)连接起来,用串口电缆将ARMSys核心板的UART0口和PC机连接起来。

连接好串、并口电缆线之后,就可以上电了。

电源打开之后,看到红色发光管点亮后熄灭,说明核心板启动正常。

此时JATG模块上只有指示电源的红灯点亮,说明并口已经连接好了。

2 超级终端超级终端是windows自带的一个串口调试工具,其使用较为简单,被广泛使用在串口设备的初级调试上。

超级终端是一个通用的串行交互软件,很多嵌入式应用的系统有与之交换的相应程序,通过这些程序,可以通过超级终端与嵌入式系统交互,使超级终端成为嵌入式系统的“显示器”。

在Windows操作系统下,选择“开始|程序|附件|通讯|超级终端”,建立一个超级终端项目,并命名为“ADCtest”。

按连接的串口进行相应设置:波特率:115200,数据位:8位,无奇偶校验,停止位:1位;数据流控制:无。

s3c44b0x主板启动用到的代码分析

s3c44b0x主板启动用到的代码分析

s3c44b0x主板启动用到的代码分析s3c44b0x主板启动用到的代码分析一首先从cpu/s3c44b0/start.S这个文件开始执行,这个文件主要作以下几点:1 设置处理器的工作模式。

2 初始化中断向量。

3 关闭看门狗功能。

4 允许timer5的中断(时钟中断)。

5 允许IRQ中断,进制FIQ中断。

6 设置时钟控制寄存器控制CPU的主频。

根据我自己的开发板进行了设置。

(下面介绍了时钟主频的计算公式)。

7 调用board/<your.board>/lowlevel.S对存储器进行初始化。

这个文件主要是根据开发板设置每个存储器的BANK。

我修改了这个文件使其支持我的开发板。

8 将ROM中的U-BOOT代码拷贝到RAM中。

并在RAM中设置好中断向量表。

9 设置堆栈。

10 跳到lib_arm/board.c中执行start_armboot.二执行lib_arm/board.c中的start_armboot,主要完成一下工作:1 调用cpu/<your.board>/cpu.c中的cpu_init()来刷新所有cache,将0x00000000~0x0c000000区设为非cache区。

并使用全部8K空间作为cache。

总线优先级为默认优先级。

2 调用board/<your.board>/<your.board>.c中的board_init()根据具体的开发板对PORT进行设置。

我修改这个文件使其支持我的开发板。

3 调用cpu/s3c44b0/interrupts.c 中的interrupt_init()初始化Timer1定时器使其在指定时间产生中断。

4 根据include/configs/<your.board>.h配置文件中(CFG_ENV_IS_IN_<*>)环境变量保存位置选项来调用common/env_*.c对应文件中的env_init()。

uClinux port to S3C44B0X 心得

uClinux port to S3C44B0X 心得

硬件其实可以根据你的配置在BIOS中设置好,当然用自启动版可以在解压缩前设置好。

在好几个坛子上面看到大家对uC的讨论热火朝天,但差不多都是基于4510开发板的,而基于44B0的好象很少,并且不象4510的那样成熟和清晰。

可能和4510主要是网络应用有关吧,它可以充分利用uC的网络功能。

如果在44B0上加入uC,也可以体验一下这个操作系统,再加入往卡驱动的话,也能实现网络哦!记得以前在ARM开发论坛看到一位高人写过在44B0的uC上加网卡驱动的文章,想做这个的兄弟可以去找找。

我手头有4510和44B0的板子各一块,4510是代博的,上面带的uC挺好用。

于是想在44B0上也跑跑uC,两周前我调通了8019后觉得条件差不多了,因为uC的IMAGE.RAM是非压缩的,有1M多,调试的时候如果不用到网络下载的话会很慢,即使用串口调到115.2K也要几分钟时间,而且可靠性也较低,所以有网卡芯片是移植的一个重要条件,当然有USB通讯的话也很快,不过我的板那块坏了,并考虑到以后会用到网络,还是用8019吧。

从我有板开始我就一直找可用于44B0的uC,并下载过TPU兄的源文件,上次看到TPU兄的留言可帮忙移植就马上留言联系,后来通过一封MAIL好象就没消息了,只好自己摸索着做做,所以我的移植过程可能存在很多不对的地方,大家一起参考修正.开始我想跑跑TPU的ZIMAGE,这是一个压缩后的文件,运行时需要自解压,查到它的起始运行地址是0XC300 000,KENERL运行地址是0XC008000,用自己的BIOS将数据DOWN到设定地,再RUN,运行出现结果了,开始是些乱码,调了一下串口速率,在38400,显示UCOMPRESS KERNEL...不过到START KERNEL后,再没下文了,于是用AXD反汇编调试,发现是因为进入KERNEL后没找到PROCESSER ID而停掉,可能是要在BIOS中传递过去。

后来想到一个办法,把我现在在4510板上跑的uC改动后移植到44B0上,在那一版上大家对uC的应用都做得比较熟了,编起来也比较方便。

杭州立泰电子 S3C44B0X 中文数据手册

杭州立泰电子 S3C44B0X 中文数据手册

S3C44B0X中文数据手册S3C44B0X中文数据手册 (1)6 处理器Wrapper和总线优先级 (2)6.1Cache的组织 (2)6.2Cache替换操作 (2)6.3 cache 禁止操作 (2)6.4 cache 刷新 (3)6.5非cache区域 (3)6.6通过使用cache来提高程序的执行速度 (3)6.7内部SRAM (3)6.8写缓冲区操作 (4)6.9总线优先级地图 (5)6.10特殊寄存器 (5)6 处理器Wrapper和总线优先级处理器wrapper包括一个cache,写入缓冲器,和CPU内核。

总线仲裁逻辑决定每个总线占用者的优先权。

处理器wrapper有一个8k直接的内部存储器。

内部存储器可以以3种方式采用。

第一是8k字节的存储空间作为8k字节的统一(指令或数据)cache(高速缓冲存储器)。

第二,内部存储器可以用作一个4k字节的统一cache和一个4k字节的内部SRAM。

第三,内部存储器可以整个地用作8k字节的内部SRAM。

内部统一(指令或数据)cache采用4种方式与某个4个字(16个字节)的行建立链接结构。

它采用一种写穿式(write-through)的原则保持数据的一致性。

当在cache中找不到相应的内容(称为cache miss),4个字的存储内容从外部存储器连续地取得。

它采用一种LRU(最近使用最少)算法来提升命中的比率。

统一cache通过有区别的方式来处理指令和数据。

内部SRAM主要用来减少ISR的执行时间。

由于内部SRAM具有最短的操作时间,因此能够减少ISR的执行时间。

当然ISR在SRAM运行也是非常有效率的因为大多数的ISR 代码都会引起cache miss。

总线仲裁逻辑可以决定总线占用者的优先级。

总线仲裁逻辑支持一种round-robin优先级模式和一种固定的优先级模式。

同样LCD_DMA, BDMA, ZDMA, nBREQ(外部总线控制器)之间的优先级可以通过软件来修改。

S3C44B0 学习板使用指南

S3C44B0 学习板使用指南

一、S3C44B0 学习板简介 (3)二、系统上电 (5)三、测试程序 (8)四、建立 Windows 系统上虚拟 Linux 环境 Cygwin 以及 ARM 交叉编译环境 (9)五、Bootloader 装载程序(U-BOOT) (11)六、uClinux 编译与下载 (21)七、开发板的地址空间分配 (35)八、FAQ 常见问题 (36)S3C44B0 学习板使用指南三星公司推出的 16/32 位 RISC 处理器 S3C44B0X 为手持设备和一般类型的提供了一种高性能低成本的解决方案。

为了降低整个系统的成本,S3C44B0X 内部集成了丰富的片内外设,包括:8K 的 cache,可选的片内 SRAM,LCD 控制器,带有握手信号的双同道 UART,4 同道 DMA,系统管理器(片选逻辑,FP/EDO/SDRAM 控制器),带有PWM 功能的 5 通道定时器,I/O 端口,RTC 实时时钟,8 通道 10 位 ADC,IIC、IIS 总线接口,同步 SIO 接口以及用于时钟管理的PLL 锁相环。

S3C44B0X 采用了 ARM7TDMI 内核,0.25um 标准宏单元和存储编译器。

TDMI 的每一个字母代表一种功能: T(Thumb),支持 16 为压缩指令集 Thumb D(Debug),支持片上 Debug M(Multiplier),内嵌硬件乘法器 I(ICE):嵌入式 ICE,支持片上断点和调试点S3C44B0X 极低的功耗以及简单,只能的全静态设计使其非常适合对成本和功耗敏感的项目。

同时S3C44B0X 还采用了一种新的总线结构,即 SAMBAII(三星 ARM CPU 嵌入式微处理器总线结构)S3C44B0X 通过集成全面、通用的片内外设,大大减少了系统电路中除处理器外的器件需求,从而最小化系统成本。

下列是其集成的边内外设: 外部存储器控制器(FP/EDO/SDRAM 控制器,片选逻辑)控制器(最大支持 256 色 STN,LCD 具有一个专用的 DMA 通道) LCD 2个通用 DMA 通道,2 个外设 DMA 通道并有片外请求管脚个 UART,带有握手协议(支持 irDA1.0,具有 16 字节 FIFO)1 通道 SIO 2多主总线接口 IIC IIS总线控制器个 PWM 定制器和 1 通道内部定时器 5 看门狗定时器个通用 I/O 口,作多支持 8 各片外中断源 71 功耗管理:普通,慢速,空闲和停止模式 8 通道 10 位 ADC 具有日立功能的 RTC 带 PLL 的片内时钟发生器使用 S3C44B0X 来构建系统,能够降低真个系统的成本,我们列举以下一些可以采用 S3C44B0X 构建系统应用: GPS 电话 PDA(个人数字助理) 掌上游戏机 指纹识别系统 终端汽车导航系统 mp3 等手持应用一、 S3C44B0 学习板简介S3C44B0 开发板是依据三星公司评估板的基础上开发而来, 其主要硬件包括: Samsung S3C44B0X 66MHz (ARM7 内核) 8M Flash 2M SDRAM 10M Base-T 以太网接口 IDE 接口 USB1.1 设备接口 IIC 总线接口 RTC 实时时钟 LCD 接口,支持 640×480 以下单色或 320×240 以下 STN/DSTN 256 色 2 个 RS232 UART 串行口,支持 Modem 握手信号 标准 14 针 JTAG 接口 1×4 键盘,1×3 LED 灯 可扩展总线接口同时,本开发板提供完善的开发包和各种硬件测试程序(含源码),以帮助客户快速掌握 S3C44B0 的各种片内外设以及扩展接口的使用方法: ADS1.2 IDE, ARM 程序开发集成环境 GNU 工具包(包括交叉编译器、链接、汇编工具) uClinux 源码包 U-Boot1.1.1(BOIS)启动控制程序(含源码) 应用程序代码 相关技术文档,手册 键盘控制 LED 试验 实时时钟演示 IIC 测试程序 PWM 测试程序 uCOS-II 实时操作系统加载试验下图是 S3C44B0 的开发板图,我们在这里可以看到使用的板子的各种外围芯片,外设以及各种接口。

S3C44B0X存储控制器功能及应用概要

S3C44B0X存储控制器功能及应用概要

大/小端模式
Endian@输入
端模式
0 1
小端 大端
S3C44B0X存储控制器功能描述(续)
2 Bank0 总线宽度
(1) 总线宽度配置:8/16/32bit (2) 配置时间:因为bank0为启动rom所在的空 间,所以要在第一次访问rom前设置banko的数据宽 度. (3) 由复位后OM[1:0]的逻辑电平决定(如下图) (4)其他存储体的总线宽度只能在系统复位后由 程序进行设定,由地址为0x01c8000的特殊寄存器 BWSCON的相应位决定。
S3C44B0X存储控制器功能描述(续)
Bank0数据宽度选择
OM0(操作方式1) OM1(操作方式0)
ROM数据宽度
8位 16位
0 0
0 1
1
1
0
1
32位
测试模式
S3C44B0X存储控制器功能描述(续)
3.存储器(SROM/DRAM/SDRAM)地址线连接
数据宽度不同,连接方式也不同 Nhomakorabea(1)只要将CPU上的相应Bank连线接到外设芯片的片选引脚上,便可以根据相应的地址进 行存储器或外设操作了。 (2)使用Bank0上的两片512KB×2存储器来放置系统BIOS,系统上电以后,PC指针自动 指向Bank0的第一个单元,开始进行系统自举。
(一 ) S3C44B0X存储控制器概述
OVERVIEW The S3C44B0X memory controller provides the necessary memory control signals for external memory access. S3C44B0X has the following features; — Little/Big endian(selectable by an external pin) — Address space: 32Mbytes per each bank (total 256MB:8 banks) — Programmable access size(8/16/32-bit) for all banks — Total 8 memory banks 6 memory banks for ROM, SRAM etc. 2 memory banks for ROM, SRAM, FP/EDO/SDRAM etc . — 7 fixed memory bank start address and programmble bank size — 1 flexible memory bank start address and programmable bank size — Programmable access cycles for all memory banks — External wait to extend the bus cycles — Supports self-refresh mode in DRAM/SDRAM for power-down — Supports asymmetrically or symmetrically addressable DRAM

ARM开发板S3C44B0使用指南

ARM开发板S3C44B0使用指南

S3C44B0 学习板使用指南重庆勤智科技有限公司三星公司推出的 16/32 位 RISC 处理器 S3C44B0X 为手持设备和一般类型的提供了一种高性能低成本的解决方案。

为了降低整个系统的成本,S3C44B0X 内部集成了丰富的片内外设,包括:8K 的 cache,可选的片内 SRAM,LCD 控制器,带有握手信号的双同道 UART,4 同道 DMA,系统管理器(片选逻辑,FP/EDO/SDRAM 控制器),带有PWM 功能的 5 通道定时器,I/O 端口,RTC 实时时钟,8 通道 10 位 ADC,IIC、IIS 总线接口,同步 SIO 接口以及用于时钟管理的PLL 锁相环。

S3C44B0X 采用了 ARM7TDMI 内核,0.25um 标准宏单元和存储编译器。

TDMI 的每一个字母代表一种功能: T(Thumb),支持 16 为压缩指令集 Thumb D(Debug),支持片上 Debug M(Multiplier),内嵌硬件乘法器 I(ICE):嵌入式 ICE,支持片上断点和调试点S3C44B0X 极低的功耗以及简单,只能的全静态设计使其非常适合对成本和功耗敏感的项目。

同时S3C44B0X 还采用了一种新的总线结构,即 SAMBAII(三星 ARM CPU 嵌入式微处理器总线结构)S3C44B0X 通过集成全面、通用的片内外设,大大减少了系统电路中除处理器外的器件需求,从而最小化系统成本。

下列是其集成的边内外设: 外部存储器控制器(FP/EDO/SDRAM 控制器,片选逻辑)控制器(最大支持 256 色 STN,LCD 具有一个专用的 DMA 通道) LCD个通用 DMA 通道,2 个外设 DMA 通道并有片外请求管脚 2个 UART,带有握手协议(支持 irDA1.0,具有 16 字节 FIFO)1 通道 SIO 2多主总线接口 IIC总线控制器 IIS个 PWM 定制器和 1 通道内部定时器 5 看门狗定时器个通用 I/O 口,作多支持 8 各片外中断源 71 功耗管理:普通,慢速,空闲和停止模式 8 通道 10 位 ADC 具有日立功能的 RTC 带 PLL 的片内时钟发生器使用 S3C44B0X 来构建系统,能够降低真个系统的成本,我们列举以下一些可以采用 S3C44B0X 构建系统应用: GPS 电话 PDA(个人数字助理) 掌上游戏机 指纹识别系统 终端汽车导航系统 mp3 等手持应用一、 S3C44B0 学习板简介S3C44B0 开发板是依据三星公司评估板的基础上开发而来, 其主要硬件包括:内核)(ARM7 Samsung66MHzS3C44B0XFlash 8M 2M SDRAMBase-T以太网接口 10M IDE 接口设备接口 USB1.1 IIC 总线接口实时时钟 RTC LCD 接口,支持 640×480 以下单色或 320×240 以下 STN/DSTN 256 色 2 个 RS232 UART 串行口,支持 Modem 握手信号 标准 14 针 JTAG 接口键盘,1×3 LED 灯 1×4 可扩展总线接口同时,本开发板提供完善的开发包和各种硬件测试程序(含源码),以帮助客户快速掌握 S3C44B0 的各种片内外设以及扩展接口的使用方法: ADS1.2 IDE, ARM 程序开发集成环境 GNU 工具包(包括交叉编译器、链接、汇编工具) uClinux 源码包 U-Boot1.1.1(BOIS)启动控制程序(含源码) 应用程序代码 相关技术文档,手册 键盘控制 LED 试验 实时时钟演示 IIC 测试程序 PWM 测试程序 uCOS-II 实时操作系统加载试验下图是 S3C44B0 的开发板图,我们在这里可以看到使用的板子的各种外围芯片,外设以及各种接口。

S3C44B0X 调试笔记

S3C44B0X 调试笔记

S3C44B0X 调试笔记开发板:北京恒丰锐科科技有限公司HF44b0开发板硬件规格:1. Samsung S3C44B0X 66MHz (ARM7 内核)2. 8M SDRAM3. 2M FLASH4. 10M 以太网接口5. IDE 接口6. USB1.1 接口7. 音频输出8. MIC 输入接口9. 时实时钟,备有可充电电池,方便您的使用。

10. IIC 总线接口11. 实时系统时钟12. LCD 接口:支持640*480 以下单色或320*240 以下STN/DSTN 256 色13. 2 个RS232 串行口14. 包括protel 格式的原理图,有利您硬件的学习。

15. 20 针JTAG 调试端口16. 1*4 键盘17. 可扩展的总线接口,CPU 的160 个引脚全部用2.54 标准插座引出编程环境:MDK 5.13仿真环境:J-LINK V8 固件版本4.90e测试项目:LCD ucGUI Flash运行和RAM运行测试LCD:夏普LM8M64(640X240 256色)1.Flash运行测试1)MDK的配置/******************************************************************************/ /* FLASH.INI: Flash Initialization File *//******************************************************************************/ /* This file is part of the uVision/ARM development tools. *//* Copyright (c) 2005-2006 Keil Software. All rights reserved. *//* This software may only be used under the terms of a valid, current, *//* end user licence from KEIL for a compatible version of KEIL software *//* development tools. Nothing else gives you the right to use this software. *//******************************************************************************/_WDWORD(0x01D30000, 0x00000000); // WTCON: Disable Watchdog_WDWORD(0x01C00000, 0x00000001); // SYSCFG: Disable Cache这里选择Flash的型号是AM29F160DB,实际型号是AM29LV160DB,但实际也好用.2.Flash运行测试1)MDK的配置//*** <<< Use Configuration !disalbe! Wizard in Context Menu >>> ***FUNC void Setup (void){_WWORD (0x1c00000, 0x00000008); //System Configuration SYSCFG_WWORD (0x01C80000, 0x11119102); //Bus Width & Wait Status Control BWSCON_WWORD (0x01C80004, 0x00000600);_WWORD (0x01C80008, 0x00007FFC);_WWORD (0x01C8000C, 0x00007FFC);_WWORD (0x01C80010, 0x00007FFC);_WWORD (0x01C80014, 0x00007FFC);_WWORD (0x01C80018, 0x00007FFC);_WWORD (0x01C8001C, 0x00018000);_WWORD (0x01C80020, 0x00018000);_WWORD (0x01C80024, 0x00860459);_WWORD (0x01C80028, 0x00000010);_WWORD (0x01C8002C, 0x00000020);_WWORD (0x01C80030, 0x00000020);// <o> Program Entry Pointpc = 0x0C001000;}//map 0x01c00000, 0x02000000 read writeLOAD ./RAM/Hello.axf INCREMENTALSetup(); // Setup for Running帮用户解决空间不够时候看的一个资料,【转】过来整理一下供大家参考:RealView MDK具有强大的编译、链接功能。

S3C44B0 试验说明

S3C44B0 试验说明

S3C44B0 试验说明S3C44B0 学习板附带了以下的例程,这样大家可以快速的掌握S3C44B0 这款ARM 芯片以及如何开发基于ARM 的嵌入式程序。

本光盘中自带的例程都是在ADS1.2 集成开发环境下完成的。

ADS1.2 是Code Warriar 公司开发的一款ARM 嵌入式程序集成开发环境。

在使用光盘中的试验例程之前我们需要做以下的准备工作安装ADS1.2 安装调试代理将程序从光盘拷贝到硬盘中,并去掉文件的只读属性。

一、安装ADS1.2将安装包其解压后,双击setup.exe 开始安装,在拷贝文件结束后将出现ARM License Wizard界面,如下图,在这里需要安装license 文件。

点击下一步,选择Install License,点击下一步。

在这里选择安装目录下的Crack 下的license.dat 文件然后点击下一步完成认证。

认证过程也可以在软件安装完毕后选择License Installation Wizard 来重新认证。

二、安装H-JTAG 调试代理将光盘:\工具\JTAG 工具\H-JTAG+V0.7.0.rar 目录拷贝到硬盘,然后解压缩,安装解压目录下的可执行文件。

从开始菜单选择AXD Debugger,如图进入调试环境后,选择如下选项进入代理选择对话框,如下:选择Add按钮,找到H-JTAG的安装目录,添加调试代理的DLL库,如下选择确定后,选择Configure,出现如下界面,表示H-JTAG代理安装正确并作为缺省选择。

确定后,按OK键,如果JTAG调试器和开发板连接正确,会出现如下界面到这一部H-JTAG配置正确,可以直接从编译环境直接进入调试环境调试,如下图:三、试验在做以下试验的时候请注意,如果你的Memory 控制部分没有正常的初始化,在AXD 调入编译好的images 后,我们执行run 指令,程序会跑飞。

其原因就是因为Memory 控制没有正常的初始化,这是后我们有两种方法解决。

S3C44B0调试笔记(1)

S3C44B0调试笔记(1)

S3C44B0调试笔记(1)S3C44B0 调试笔记——BIOS部分由于调试耗费了我太多时间,所以记录下来,⽅便以后复习,同时也希望能给初学者⼀点⼉启⽰,⼤家少⾛弯路。

我是去年开始听说ARM的,可能是本⼈太闭塞了吧。

看到后就有⼀种想玩的冲动,想从51升级ARM。

⽹上都说44B0⽐较适合初学者。

机缘巧合,21ic上看到有⼈叫卖44B0空板,很便宜100RMB,主板加简易JTAG⼩板。

做研发的都穷啊。

还不错,钱汇过去,板⼦第3天就回来了,就是⽹上流⾏的那个44B0 PCB。

贴个图吧,随便找了块和我那块板⼦⼀模⼀样的:(FIGURE - 1)拿到板⼦挺⾼兴的,检查了⼀下线路没问题。

就按对⽅提供的BOM单采购元器件。

先把电源部分焊上,测量没问题,再把必要的元器件焊上(CPU、SDRAM、FLASH、UART),同时还有JTAG⼩板。

量电源和地没有短路,上电!电源灯亮了,没冒烟。

下⾯⼀步就是把BIOS程序烧写到FLASH上了,对⽅提供的是FLUTED,按照说明操作,烧录失败!这下傻了,最怕的就是这个,对于⼀个初学者来说,简直是灭顶之灾啊。

⾸先怀疑CPU或FLSH是否虚焊,我的焊接⽔平⼀般,所以很值得怀疑,只好⼜搪了⼀遍。

但问题依旧。

⼜怀疑JTAG⼩板,仔细检查了⼀下没问题啊,跳线插插拔拔的也没⽆济于事。

怀疑并⼝,重启进BIOS,并⼝设置也没问题。

当天是没办法了,睡觉吧。

第⼆天就开始联系供应商,寻求帮助,但没什么结果。

也是,就100块钱,还要什么服务啊。

只好⾃⼰找问题,看到原理图上FLASH⽤的是SST 39VF160 ,我记得我的不⼀样啊?我的BOM上写的是AM29LV160,我⼜询问了供应商,他确认了⼀下说他的BOM写错了。

狂晕啊。

不过还好,终于找到问题了,但换FLASH还得周末去买啊,等不及了,看看这个能不能凑合⽤吧,改FLUTED的FCD⽂件,就是根⽬录那个DEFAULT.FCD。

找到2块FLASH的Datasheet对⽐着改,连改带调,2个晚上,终于烧录成功了。

ARM(44b0)初学者总结

ARM(44b0)初学者总结
0x0c0001ac: e8bd8001 .... LDMFD r13!,{r0,pc}
这是ads输出的汇编代码,就是刚才的宏对应swi的一个实例,其中有两句
LDR r0,0xc000600
LDR r0,[r0,#0]
这些反汇编的代码是一个点led的程序的,可以看出我的小程序代码到0x0c000e10就结束了,0x0c200000是我指定的数据区起始地址。这段程序把|Image$$RO$$Limit| 开始的,长|Image$$ZI$$Base| -|Image$$RW$$Base| 的数据区拷到|Image$$RW$$Base|的对应单元,就是0x0c200000开始的一段ram中。后面还有|Image$$ZI$$ Limit|,在我的代码中是0x0c000c88,内容是0x0c200004.这其实表明我的小程序并没有rw区,只有一个初始为0的变量。
ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
另外还有一段初始化ram控制器的代码:
0x0c0001a0: e59f0458 X... LDR r0,0xc000600
0x0c0001a4: e5900000 .... LDR r0,[r0,#0]
0x0c0001a8: e58d0004 .... STR r0,[r13,#4]
3烧写flash,ADX中似乎有个写入flash的选项,我自己没有具体用过。但听说用jtag写flash会比较慢。由于nor flash或nand flash都是可以编程烧写的,即我们可以写个程序擦写flash,问题是如何读取编译出来的映像文件。这个也不用担心,adx中有个菜单把文件内容写入指定的地址中,把影响文件指定到一个ram地址,然后就用烧写程序把ram的内容拷入rom中就是了。我们有个boot程序,一个主程序要映射到rom 中.假设我把0xc20_0000开始的2m地址作rom的映像,则把boot程序导入0xc20_0000,boot的程序非常短,在 0xc20_1000开始放主程序。然后把0xc20_0000到0xc40_0000的内容全部拷入rom中(当然在导入文件前这些ram应该先被清空或写入ff.)。

xx嵌入式系统开发技术知识点 S3C44B0的ADC.doc

xx嵌入式系统开发技术知识点 S3C44B0的ADC.doc

xx嵌入式系统开发技术知识点 S3C44B0的ADC xx年12月计算机三级考试马上就要开始了,下面为大家了关于S3C44B0的ADC組件及开发应用的知识点,希望对你有所帮助。

常用ADC存放器
1、ADC控制存放器ADCCON决定是否允许启动、选择ADC通道、反映ADC转换状态
2、ADC预分频存放器ADCPSR决定预分频系数
3、ADC转换时间:
TADC=2×(ADCSPR的值+1)×16/MCLK
4、ADC数据存放器存放转换后的10位数字量
5、对ADC操作三要素:
(1)选择通道并启动AD变换
(2)查询状态(是否转换结束)
(3)读取转换结果
如果MCLK=64MHz
1、让ADC转换时间为10uS,写出程序片段
解答:ADC转换时间:
TADC=2×(ADCSPR的值+1)×16/MCLK
ADCPSR=10/32*64-1=19
主要是写ADCPSR存放器,写存放器三条指令:
LDR R0,=rADCPSR
MOV R1,#19
STR R1,[R0]
解答续:
CMP R2,#30
BCC LPSET0
CMP R2,#90
BHI LPSETFF
MOV R3,R2
B LPGO
LPSET0:
MOV R3,#0
B LPGO
LPSETF:
MOV R3,#0xFFFFFFFF LPGO: B START。

用 Jlink 调试 44B0

用 Jlink 调试 44B0

用Jlink 调试44B0在淘宝上买了个Jlink 呵呵原来这东西要800 多RMB 的现在只要100了开心哇买了一个烧写那叫一个爽啊!ARM 9 的光盘山已经有了而且还告诉你如何烧NAND 由于arm9 芯片带有硬件ECC 使得SLC NAND火了一把从手机到PDA 。

说说我捡的一块44BX 如何烧吧这也是一个流程如何烧外部NOR 这个结构一般很少用了目前芯片上都会带引导功能可以通过串口烧写但是Jtag 是无敌的这点需要了解的其实也很简单记录下来原理Jlink 是通过Jtag 下载(废话:()如果硬件焊接没有问题首先进入halt 状态然后通过Flash 控制字去读写你要告诉Jlink 一些信息信息1 还是流水线的问题cache 44BX 有8K 的SRAM 这个需要告诉Jlink 这样烧起来会很快信息2 写flash 要关闭cache 原因很简单cache 被我们当RAM 用了信息3 NOR flash 的规格JFLASH 自己带了非产多的规格如果找不到可以auto detect我比较喜欢用ADS 如果用Jlink 调试44B0 程序需要初始化外部的SDRAM 你可以根据硬件手册完成这个任务SetJTAGSpeed(30);Reset(20);Write32(0x1C00000,0x00000000); // //;SYSCFGWrite32(0x1E0000C,0x07FFFFFF); // //;INTMSKWrite32(0x1D30000,0x00000000); // ;WTCON disableWrite32(0x1C40000,0x80001B1B); // ;SBUSCONWrite32(0x1C80000,0x11110112); // ;BWSCONWrite32(0x1C80004,0x00000600); // ;BANKCON0Write32(0x1C8001c,0x00018000); // ;BANKCON6Write32(0x1C80020,0x00018000); // ;BANKCON7Write32(0x1C80024,0x0086041a); // ;REFRESHWrite32(0x1C80028,0x00000010); // ;BANKSIZEWrite32(0x1C8002C,0x00000020); // ;MRSRB6 Mode register set for SDRAM Write32(0x1C80030,0x00000020); // ;MRSRB7Write32(0x1D80000,0x00018021); // ;PLLCONSetJTAGSpeed(4000);把上面存成 .setup 文件就可以Jlink 需要这些控制字做初始化。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

S3C44B0 调试笔记——BIOS部分由于调试耗费了我太多时间,所以记录下来,方便以后复习,同时也希望能给初学者一点儿启示,大家少走弯路。

我是去年开始听说ARM的,可能是本人太闭塞了吧。

看到后就有一种想玩的冲动,想从51升级ARM。

网上都说44B0比较适合初学者。

机缘巧合,21ic上看到有人叫卖44B0空板,很便宜100RMB,主板加简易JTAG小板。

做研发的都穷啊。

还不错,钱汇过去,板子第3天就回来了,就是网上流行的那个44B0 PCB。

贴个图吧,随便找了块和我那块板子一模一样的:(FIGURE - 1)拿到板子挺高兴的,检查了一下线路没问题。

就按对方提供的BOM单采购元器件。

先把电源部分焊上,测量没问题,再把必要的元器件焊上(CPU、SDRAM、FLASH、UART),同时还有JTAG小板。

量电源和地没有短路,上电!电源灯亮了,没冒烟。

下面一步就是把BIOS程序烧写到FLASH上了,对方提供的是FLUTED,按照说明操作,烧录失败!这下傻了,最怕的就是这个,对于一个初学者来说,简直是灭顶之灾啊。

首先怀疑CPU或FLSH是否虚焊,我的焊接水平一般,所以很值得怀疑,只好又搪了一遍。

但问题依旧。

又怀疑JTAG小板,仔细检查了一下没问题啊,跳线插插拔拔的也没无济于事。

怀疑并口,重启进BIOS,并口设置也没问题。

当天是没办法了,睡觉吧。

第二天就开始联系供应商,寻求帮助,但没什么结果。

也是,就100块钱,还要什么服务啊。

只好自己找问题,看到原理图上FLASH用的是SST 39VF160 ,我记得我的不一样啊?我的BOM上写的是AM29LV160,我又询问了供应商,他确认了一下说他的BOM写错了。

狂晕啊。

不过还好,终于找到问题了,但换FLASH还得周末去买啊,等不及了,看看这个能不能凑合用吧,改FLUTED的FCD文件,就是根目录那个DEFAULT.FCD。

找到2块FLASH的Datasheet对比着改,连改带调,2个晚上,终于烧录成功了。

拔下JTAG,接上串口,打开超级终端。

复位,一堆乱码,我想应该差不多了,试着更改超级终端的设置。

终于成功了,我看到BIOS的提示信息了,敲个help进去,出来一堆,当时感觉好爽,这个程序做的不错,和DOS一个感觉了,哈哈。

然后焊上网络部分,输入ap,可以ping通,网络基本正常。

随后就是下载uClinux了,按照供应商的说明文档,先把程序从0地址拷贝到0x1f0000,我运行copy命令,程序复位。

重试,依旧。

第一个想法就是,BIOS内部程序擦写FLASH的函数和我的芯片不兼容,无奈,只好对比着两块FLASH的Datasheet修改BIOS程序。

调试了一个多礼拜,依旧。

这下彻底崩溃了,感觉程序应该没有问题了。

最终不得不放弃,只好换芯片,把AM29LV160换成了SST39VF160。

用最初的BIOS,但现象还是依旧,这可是怎么回是啊?仔细想了一下,会不会因为程序代码在FLASH里,而我又去擦除和写FLASH导致的系统崩溃?擦写FLASH的底层源码都有End-Detection, 例如擦Sector的BIOS源码,在发送完命令字后,有如下一段代码进行判断:while(1){U16 i;i = *((volatile U16 *)sector)&0x40;if(i!=*((volatile U16 *)sector)&0x40) //D6 == D6continue;if(*((volatile U16 *)sector)&0x80)break; //D7 == 1}(CODE - 1)用了2种方法判断擦除操作是否成功,看芯片资料,在这个时候,你去读FLASH那个扇区地址的话,会得到擦除是否成功的信息,而不是得到那个扇区号所对应绝对地址的数据!也就是说在这个时候去读特定地址sector会出错,那么是不是必须在擦写操作完成后,CPU才能取指,运行程序代码?对于我的这块板子,我感觉是这样的。

因为它总是会DOWN在这里。

但以前碰到过其他CPU,可以在同一块FLASH存储程序,同时程序又可以擦写这块FLASH 的情况。

这种区别会不会是不同FLASH型号造成的?期待指点。

结论:S3C44B0的FLASH (39VF160)不能在自身运行程序的同时,对自己进行擦写操作。

那BIOS的源码有问题了,我该怎么做?看来现在只能把BIOS从Flash里copy到SDRAM中才行。

用move命令实现copy:move 0 0xc000000 10000。

但当我run 0xc000000 时,程序重启,为了确认程序是从哪里执行的,我写了一个读pc命令rdpc(见CODE - 2)。

读出的pc值是0x41c4,显然,程序是从0地址重启了。

这里又让人糊涂了,怎么又重启了呢?想不通了,这个疑问留在了这里,当时没有解决,后来拐了个弯才发现了问题。

int ReadPC(int argc, char *argv[]){U32 i;U16 j,k;__asm{mov i,R15}j=i/0x10000;k=i%0x10000;printf("PC V alue = 0x%x \n",i);printf("PC V alue = %d - %d \n" ,j,k);__asm{MRS i,CPSR}j=i/0x10000;k=i%0x10000;printf("CPSR V alue = 0x%x \n",i);printf("CPSR V alue = %d - %d \n" ,j,k);return 0;}(CODE - 2)我又仔细看看供应商的说明文档,需要先把BIOS代码copy到0x1f0000,然后把uClinx 的ROM文件下载到0xc000000位置运行。

怎样才能把BIOS程序从0地址搬移到0x1f0000?决定还用FLUTED,先把0地址的数据擦除,然后把初始地址设成2031616(FLUTED用十进制),烧录成功,但不能启动。

是不是因为程序从0地址进入,但不能执行到0x1f0000?可是我把前面的flash都擦了啊,都是0xff,程序应该可以跑到这里啊?看情况肯定是程序指针没有到0x1f0000了。

搞不定了,这里耽误了一些时间,不过后来还是从BIOS的源码找到了突破口,我注意到了Prog命令,这段代码让人很费解了:#define __ROM_SIZE 0x200000#define BIOS_BASE (__ROM_SIZE-0x10000)#define BIOS_LOAD (__ROM_SIZE-4)if(argc>4)if(strncmp(argv[4], "-no0", 4)==0)overwrite0 = 0;if((prog_begin==0)&&overwrite0){unsigned int ins;ins = *(unsigned int *)data_begin;if((ins>>24)==0xea) // instruction: b xxxx, now just support b instruction!!!bios_load_addr = ((ins&0xffffff)<<2)+8;elsebios_load_addr = 4; // other instruction, jump to 4bios_load_addr = (bios_load_addr-BIOS_LOAD-8)/4;bios_load_addr = (bios_load_addr&0xffffff)|0xea000000;*(unsigned int *)data_begin = 0xea000000+(BIOS_BASE-8)/4;modify_a0 = 1;}(CODE - 3)仔细分析了一下,程序的意思就是在你烧录0地址的时候,如果不选-no0参数,那么程序将会把0位置的数据通过计算转换成跳转指令的汇编码(0xeaxxxxxx)。

替换成pc跳转到BIOS_BASE(0x200000-0x10000=0x1f0000)的指令,终于对上号了。

*(unsigned int *)data_begin = 0xea000000+(BIOS_BASE-8)/4; arm指令是32位的,所以除4,-8是因为3级流水线,如过这里不清楚的话,建议直接从ADS里看b指令的汇编码。

这下搞懂了,我就在BIOS里调用了prog函数,随便烧了几个字节到0地址。

读出来看0~4分别是0xfe 0xbf 0x07 0xea。

汇编码是:0xea07bffe。

,0x7bffe是指跳转的指令数。

arm是3级流水线,即pc为取指指针,pc-1是译码指针,pc-2是执行指针。

程序复位,从地址0开始执行,跳转0x7bffe条指令。

我们算一下,(0x7bffe+2)×4 =0x1f0000,也就是说,程序跳转到了0x1f0000。

(FIGURE - 2)顺便提一下,我的BIOS里加的读函数,读指定地址的数据。

int ReadData(int argc, char *argv[]){int addr, size,i;if(argc<3){puts("Please enter move addr size\naddr = read addr, size = read size\n");return -1;}addr = strtoul(argv[1]);size = strtoul(argv[2]);if(addr==-1||size==-1){puts("Parameter error\n");return -1;}if(size>0x1000){puts("Parameter error, size must less than 1000(in hex)\n");return -1;}printf(" Address Data \n");for(i=0;i<size/2;i++){printf(" %x %x \n", addr+2*i,*((unsigned short *)addr+i));}return 0;}(CODE - 4)板子复位,居然还是没有反映。

郁闷啊。

又怎么了呢?想吧。

一时间真的搞不懂了。

后来看了一些关于ads编译的资料,发现原来RO、RW和ZI还有文章。

相关文档
最新文档