18

关于投票
S3C44B0 BIOS的keil CARM版

/**********************************************************************
说明:S3C44B0 BIOS的keil CARM版
源代码来自互连网,由本人进行了一些修改,使其在keil UV3 2.5A上编译通过。
主要修改的地方在启动文件,FLASH的烧录部分,另外在控制台中增加了几个命令。
硬件平台为: CPU:S3C44B0;SDRAM:HY57V641620;FLASH:29LV160DB;网卡芯片:RTL8019AS。
本软件仅供学习交流使用,不得用于其它用途,否则后果自负。
修改者:computer00
 Http://Computer00.21ic.org
 Http://www.ednchina.com/blog/computer00

                                              2007-5-10
**********************************************************************/

 

S3C44B0-BIOS-KEIL源代码包下载:rar

该开发板的原理图下载(注意U4和R39不要安装,R8接VCC5.0端改为接地):rar

 

 

又对代码做了一点更改,启动代码s3c44b0x.s中添加了几句判断是否要复制代码的指令,如下,请找到相关部分修改:
;****************************************************************************
;为BDMA改变BDMACON的复位值
;BDMA目的寄存器
BDIDES0     EQU 0x1f80008
BDIDES1     EQU 0x1f80028
 LDR R2, =BDIDES0      
 LDR R1, =0x40000000   ;BDIDESn reset value should be 0x40000000 
 STR R1, [r2]
 LDR R2, =BDIDES1     
 LDR R1, =0x40000000   ;BDIDESn reset value should be 0x40000000 
 STR R1, [r2]
;****************************************************************************
;****************************************************************************
;将FLASH中的代码段(0x1E0000-0x1EFFFF)复制到RAM中(0xC7C0000-0xC7CFFFF)
;如果已经在RAM中运行,则不要复制
    MOV R1,PC
    LDR R2,=0x0C000000   ;SDRAM的起始地址
    CMP R2,R1
    BLS EndCopy
    LDR R1,=0x001E0000   ;BIOS在FLASH中的地址
    LDR R2,=0x0C7C0000   ;BIOS在SDRAM中的地址
    LDR R7,=0x0C7D0000-4 ;BIOS总共64K
LOOP:
    LDMIA R1!,{R3-R6}     ;装入4个字到寄存器中
    STMIA R2!,{R3-R6}     ;将4个字保存到RAM中
    CMP R2,R7            ;比较拷贝是否完成
    BLS LOOP             ;循环
EndCopy:
;****************************************************************************
;自己的代码结束
;****************************************************************************
 
 
 
 
另外,在main函数中将PortInit();前面的注释去掉,然后找到PortInit()函数,修改成如下代码:
/****************************************************************************
【功能说明】IO端口功能、方向设定
****************************************************************************/
void PortInit(void)
{
 //其它IO在S3C44B0X.s里面已经配置好了。直接使用keil提供的Configuration Wizard设置更方便
 //当然也可以在这里来配置
 rPDATG = 0xff;
 rPCONG = 0x000f; //enable extint0 extint1
 rPUPG  = 0x00;  //enabled pull up register
 rEXTINT = 0x42;   //所有的外部硬件中断为低电平触发, extint0 为下降沿,extint1为上升沿 
 rINTCON = 5;    // non vector mode, irq enable
 rINTMOD = 0;    //all are irq mode 
}

 

系统分类: ARM
用户分类: 初学ARM
标签: S3C44B0 BIOS的keil CARM版
来源: 整理
发表评论 阅读全文(1795) | 回复(12)

17

关于投票
调试44B0时,有一条关键的线断了,让我郁闷了好久
昨天在调试SC44B0时,程序老是跑飞,慢慢调试,发现内存数据不对。后来改为使用内部SRAM,发现程序就运行正常了。开始以为是SDRAM的访问时钟以及刷新时间等不对,所以把每个时间都核对了一遍,结果还是不行。弄了很久,最后实在是没办法了,把延迟周期等配置成最大,刷新率提高,再把主频降下来,发现还是不行。这时就开始怀疑硬件有有故障了——要不就是线路断了或着短路了,要不就是内存芯片挂了。只好动用示波器了。查看SDRAM的各个脚波形状态,发现主时钟,时钟使能,片选,写控制,列地址选通,高、低字节选通等引脚均电平或波形正常,惟独行地址选通没有波形出现,沿着这条线往CPU方向测量,发现到一个过孔的位置波形就出现了,哈哈,肯定是这条线哪里断了。根据经验,通常就断在过孔边沿附近,因为这些地方是薄弱环节。刚好这个过孔旁边写了几个大字,这个过孔附近被白色的丝印盖住了,将其刮开,中间有一小段距离(大概零点几mm,不过这足以致命了^_^)没有铜箔!由于被丝印盖住,以看不到里面实际上已经断开了,事实上这里不是后来才裂开的,而是在做PCB的时候就没有做好。把表面的绿色阻焊剂刮掉,露出铜,然后再上锡,用条小铜丝一端穿在过孔上,另一端搭在这条线上,焊好。然后再上电测试,哈哈,发现内存数据都对了!高兴了好一阵^_^。将主频设置回原来的63.57M,测试OK。然后再将访问时间以及刷新时间等一个个试到最佳状态,OK,全部搞定,8M内存测试通过,发帖庆祝之:)
系统分类: ARM
用户分类: 初学ARM
标签: ARM44B0 硬件 断线
来源: 原创
发表评论 阅读全文(1389) | 回复(1)

11

关于投票
32位的处理器,对8位的数运算,会比较累吗?
我们知道,8位机处理16位或者32位数据会比较累,那么32位处理器处理8位的数据,是否也会有同样的问题呢?
 
可能会累的.因为ARM是32位机,所以它在处理8位的数据时,需要进行一些屏蔽其它位的操作,所以比操作32位的要慢.

例如,你声明一个char型的变量c,它只有8bit,做一个自加操作,c++,那么编译的代码是先进行加1操作,然后再使用与操作,将高24位清0.以下是来自keil对ADuC7026 ARM7编译的结果:

    51:  unsigned long int i;
    52: 
    53:  unsigned char c; 
    54: 
0x000802AC  E92D4000  STMDB     R13!,{R14}
    55:  c++;
0x000802B0  E2833001  ADD       R3,R3,#0x00000001
0x000802B4  E20330FF  AND       R3,R3,#0x000000FF
    56:  i++;
0x000802B8  E2844001  ADD       R4,R4,#0x00000001
    57:  c--;
0x000802BC  E2433001  SUB       R3,R3,#0x00000001
0x000802C0  E20330FF  AND       R3,R3,#0x000000FF
    58:  i--;
0x000802C4  E2444001  SUB       R4,R4,#0x00000001

i是32位的,c是8位的,一看编译结果便知.

由于这个是临时变量,保存在寄存器中,所以需要这样的操作。如果是保存在内存中的变量,由于有LDRB(字节加载)和STRB(字节存储)指令,所以可以不用与操作.

    56:  c++;
0x000802B8  E59F02F8  LDR       R0,[PC,#0x02F8]
0x000802BC  E5D01000  LDRB      R1,[R0]
0x000802C0  E2811001  ADD       R1,R1,#0x00000001
0x000802C4  E5C01000  STRB      R1,[R0]
    57:  i++;
0x000802C8  E59F02EC  LDR       R0,[PC,#0x02EC]
0x000802CC  E5901000  LDR       R1,[R0]
0x000802D0  E2811001  ADD       R1,R1,#0x00000001
0x000802D4  E5801000  STR       R1,[R0]
    58:  c--;
0x000802D8  E59F02D8  LDR       R0,[PC,#0x02D8]
0x000802DC  E5D01000  LDRB      R1,[R0]
0x000802E0  E2411001  SUB       R1,R1,#0x00000001
0x000802E4  E5C01000  STRB      R1,[R0]
    59:  i--;
0x000802E8  E59F02CC  LDR       R0,[PC,#0x02CC]
0x000802EC  E5901000  LDR       R1,[R0]
0x000802F0  E2411001  SUB       R1,R1,#0x00000001
0x000802F4  E5801000  STR       R1,[R0]
 
由于有些编译器会把变量加载到寄存器中操作,特别是对于循环操作等,因此也会增加类似的与操作指令.所以,有时候为了加快速度,宁愿选用32bit型的数据,而不用其它类型的。
 
当然,为了节省空间,应尽量选用短的变量。而作为临时变量或者循环变量什么的,由于使用数量少,应尽量使用32位型的寄存器变量。实具体情况而定吧.
 
                                                 (By Computer00 @2007-01-18)
系统分类: ARM
用户分类: 初学ARM
标签: 32位的处理器 处理8位数据
来源: 原创
发表评论 阅读全文(1119) | 回复(1)

9

关于投票
ARM_00_OS之LPC213X版

现在使用的是LPC2132 MCU,如果您使用其它型号的CPU的话,只要在选项中选择合适的CPU型号,并在CPU.h文件中修改MCU型号即可。

ARM_00_OS原本是在ADuC702x上写的,该芯片上可以检测电源电压以及芯片温度,而LPC没有。我想ADuC用的人可能比较少,所以还是花了点时间弄到LPC上来了,感兴趣的朋友可以下载来玩一玩^_^。当然,您也可以在上面改进或者给我提一些意见和建议。

如果您要将重新编译过的hex文件下载到板上运行的话,请先确认选项中的创建HEX文件是否勾上,否则并未创建hex文件,烧入的而是圈圈编译的hex文件。

(已知一个致命的bug,在软件任务切换中,如果发生定时器切换任务,会导致程序跑飞,等有空了我再来换换结构修正一下。)

ARM_00_OS(LPC213x版)下载地址:rar

实际运行的效果:

点击看大图

keil仿真图:

点击看大图

系统分类: ARM
用户分类: 初学ARM
标签: ARM_00_OS之LPC213X版 嵌入式操作系统
来源: 原创
发表评论 阅读全文(955) | 回复(2)

9

关于投票
一步步教你在KEILUV3上建立自己的ARM工程

如下图所示(使用的是CARM编译器,这个入门比较快):

相关评论:http://computer00.21ic.org/user1/2198/archives/2006/16425.html

点击看大图

点击看大图

点击看大图

点击看大图

点击看大图

系统分类: ARM
用户分类: 初学ARM
标签: 在KEIL UV3上 建立自己 的ARM工程
来源: 原创
发表评论 阅读全文(1298) | 回复(18)

8

关于投票
ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统

最近在ADuC7027上写了一个ARM_00_OS,头都写晕了,发上来给大家一起来看看。

任务按优先级调度,如果处于就绪态且优先级最高的任务有两个或更多,则按时间片轮循调度。


支持任务创建、任务删除、内存分配、简单的消息、简单的设备管理、CPU及内存等使用统计等功能。

(已知一个致命的bug,在软件任务切换中,如果发生定时器切换任务,会导致程序跑飞,等有空了我再来换换结构修正一下。)

从这里下载整个文件包ARM_00_OS.rar: rar

 

keil自带的头文件有点问题,在KEIL自带的DAC.H头文件有点问题,在DAC.H文件中找到


typedef struct s_DAC {
   s_DAC_Channel Channel[DAC_COUNT]; /* @0 */
} s_DAC;


并将其改成下面的样子:

#if DAC_COUNT > 0
typedef struct s_DAC {
   s_DAC_Channel Channel[DAC_COUNT]; /* @0 */
} s_DAC;
#endif

 

 

点击看大图

点击看大图

点击看大图

点击看大图

点击看大图

系统分类: ARM
用户分类: 初学ARM
标签: ARM7 圈圈操作系统 ARM 00 OS
来源: 原创
发表评论 阅读全文(1597) | 回复(8)

8

关于投票
在ADuC7027上使用NOKIA3510彩色液晶显示器

放了几个PLMM的照片进去,效果还不错哦~~~~~~~~

 

从这里下载整个程序包:rar

LCD引脚分布图(背面)

 

跟开发板的连接(前面的是LCD,后面的是开发板):1--49;2--50;3--53;4--51;5--52;(6、7)--54;在LCD的7脚跟8脚之间连一个0.1uF的电容。

该液晶驱动芯片的数据手册: rar

 

图片的数据是用下面这个软件提取的(可能要装C++ Builder才能运行):rar

系统分类: ARM
用户分类: 初学ARM
标签: ARM ADuC7027 ADuC7026 NOKIA3510 彩色液晶显示器
来源: 原创
发表评论 阅读全文(981) | 回复(2)

8

关于投票
ADuC7027的第九个实验——定时计数器

定时器0设置为1/128秒中断1次;定时器1做为实时时钟,由串口显示时间;定时器2设置为40ms中断一次;定时器3设置为200ms中断一次。

 

从这里下载整个程序包:rar

系统分类: ARM
用户分类: 初学ARM
标签: ARM ADuC7027 ADuC7026 定时器 计数器
来源: 原创
发表评论 阅读全文(921) | 回复(2)

9

关于投票
ADuC7027的第八个实验——中断
从此处下载整个程序包:rar
系统分类: ARM
用户分类: 初学ARM
标签: ARM ADuC7027