1 汇编实现:
.global _start
_start:
// 把外设的基地址告诉CPU
ldr r0, =0x70000000 //对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff)
orr r0, r0, #0x13 //外设大小:256M
mcr p15,0,r0,c15,c2,4 //把r0的值(包括了外设基地址+外设大小)告诉cpu
// 关看门狗
ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]
// 设置GPKCON0
ldr r1, =0x7F008800
ldr r0, =0x11110000
str r0, [r1]
mov r2, #0x1000
led_blink:
// 设置GPKDAT,使GPK_4/5/6/7引脚输出低电平,LED亮
ldr r1, =0x7F008808
mov r0, #0
str r0, [r1]
// 延时
bl delay
// 设置GPKDAT,使GPK_4/5/6/7引脚输出高电平,LED灭
ldr r1, =0x7F008808
mov r0, #0xf0
str r0, [r1]
// 延时
bl delay
sub r2, r2, #1
cmp r2,#0
bne led_blink
halt:
b halt
delay:
mov r0, #0x1000000
delay_loop:
cmp r0, #0
sub r0, r0, #1
bne delay_loop
mov pc, lr
Makefile:
led.bin: start.o
arm-linux-ld -Ttext 0x50000000 -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
%.o : %.S
arm-linux-gcc -o $@ $< -c
%.o : %.c
arm-linux-gcc -o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis -rf
2 . 用汇编跳转到C实现
// 设置栈
ldr sp, =0x0c002000
// 调用C函数点灯
bl main
//与全部用汇编实现不同的是加入了栈,有了栈就可以调用其他函数。调用前程序执行地址入栈,结束后出站便可以恢复调用前执行到的语句。
/******* C *******/
void delay()
{
volatile int i = 0x10000;
while (i--);
}
int main()
{
int i = 0x10;
// 配置引脚
volatile unsigned long *gpkcon0 = (volatile unsigned long *)0x7F008800;
volatile unsigned long *gpkdat = (volatile unsigned long *)0x7F008808;
*gpkcon0 = 0x11110000;
// 跑马灯
while (1)
{
*gpkdat = i;
i++;
if (i == 0x100 )
i = 0x10;
delay();
}
return 0;
}
虽然功能是一样的,但是发现灯闪烁的频率比直接用汇编实现的要低些,说明汇编的效率还是比c高。
这里makefile不过是led.bin 的依赖文件多了一个main.c 而已。
3 .加入icache
icache是cpu和内存中间的一种缓存,使用它可以加快cpu去指令的速度,不必每次都去内存中取。它是可以随时开启的,所以越早开启越好。
// 开启icaches
#ifdef CONFIG_SYS_ICACHE_OFF
bic r0, r0, #0x00001000 @ clear bit 12 (I) I-cache
#else
orr r0, r0, #0x00001000 @ set bit 12 (I) I-cache
#endif
mcr p15, 0, r0, c1, c0, 0
汇编中加入以上代码便可以开启icache 。
4 . 按键控制LED
我的板子是tinySDK 1312B,但是我看原理图似乎和手册上说的对不上号,原理图上写的四个按键是链接到EINT16 ~ EINT19 的,对应的GPIO口也是GPL 端口,但是手册上说是GPN口,并且用程序配置为GPN口去控制LED还真是能控制,我也不太清楚什么情况,先用着吧,反正原理一样,有机会再请教大佬。
#define GPKCON0 (*(volatile unsigned long *)0x7F008800)
#define GPKDAT (*(volatile unsigned long *)0x7F008808)
#define GPNCON (*(volatile unsigned long *)0x7F008830)
#define GPNDAT (*(volatile unsigned long *)0x7F008834)
void main()
{
int dat = 0;
// 配置GPK4-7为输出功能
GPKCON0 = 0x11110000;
// 所有LED熄灭
GPKDAT = 0x000000f0;
// 配置GPN为输入功能
GPNCON = 0;
// 轮询的方式查询按键事件
while(1)
{
dat = GPNDAT;
if(dat & (1<<0)) // KEY1被按下,则LED1亮,否则LED1灭
GPKDAT |= 1<<4;
else
GPKDAT &= ~(1<<4);
if(dat & (1<<1)) // KEY2被按下,则LED2亮,否则LED2灭
GPKDAT |= 1<<5;
else
GPKDAT &= ~(1<<5);
if(dat & (1<<2)) // KEY3被按下,则LED3亮,否则LED3灭
GPKDAT |= (1<<6);
else
GPKDAT &= ~(1<<6);
if(dat & (1<<3)) // KEY4被按下,则LED4亮,否则LED4灭
GPKDAT |= 1<<7;
else
GPKDAT &= ~(1<<7);
}
}
上一篇:s3c2440内存类设备访问原理
下一篇:s3c6410 时钟设置
推荐阅读
史海拾趣
EUCHNER公司一直是一个家族企业,其企业精神和创新精神在家族成员中得以传承。随着公司的发展,EUCHNER逐渐扩张其业务范围,不仅在欧洲市场建立了稳固的地位,还开始进军全球市场。公司通过不断的技术创新和产品升级,逐渐在工控配件领域建立了良好的声誉。
在环保意识日益增强的今天,Alpha Industries积极响应绿色生产的号召。公司利用电子技术优化生产流程,减少能源消耗和废弃物排放。此外,Alpha Industries还推出了采用环保材料制成的军事服装系列,以实际行动践行绿色环保理念。这些举措不仅有助于提升公司的社会形象,也为公司的可持续发展奠定了坚实基础。
这些故事展示了Alpha Industries如何在电子技术的推动下,不断创新并适应市场变化,进而在相关领域取得显著发展。尽管这些故事并未直接涉及电子行业的核心业务,但它们却充分体现了Alpha Industries在技术创新和市场拓展方面的积极努力和取得的成果。
随着电子行业的快速发展,市场对CMOS图像传感器的需求日益增长。飞虹高科公司意识到,要想在市场中保持领先地位,必须不断进行技术创新。因此,公司加大了研发投入,引进了一批高端研发设备,并与国内外知名高校和研究机构建立了紧密的合作关系。经过数年的努力,公司成功开发出了多款具有自主知识产权的CMOS图像传感器产品,其中一款产品以其高灵敏度、低功耗和低噪声等优异性能,赢得了客户的广泛赞誉。
ELEMENT14始终将提升服务质量和客户满意度作为首要任务。公司建立了完善的客户服务体系,提供快速响应、专业解答的客户服务。同时,ELEMENT14还定期开展客户满意度调查,针对客户的反馈和建议进行改进。这些努力不仅提升了客户满意度,也增强了公司的品牌形象和市场竞争力。
ELEMENT14一直注重创新产品的引入和推广。公司紧跟电子行业的最新技术趋势,及时引入高性能、高可靠性的电子元器件产品。同时,ELEMENT14还积极推广这些创新产品,通过举办技术研讨会、发布技术白皮书等方式,帮助客户了解产品的特点和优势。这些努力不仅提升了公司的技术水平,也为客户提供了更多的选择。
Excelight非常重视企业文化建设。公司倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于探索、敢于创新。同时,Excelight还为员工提供了良好的工作环境和福利待遇,吸引了大量优秀人才的加入。
在企业文化的影响下,Excelight的团队凝聚力不断增强,员工的积极性和创造力得到了充分发挥。这使得公司在面对市场变化和竞争挑战时能够迅速作出反应和调整。
pic的型号是16F616,如果对RC4进行写操作,则不管RC1端口锁存器之前写入的是1或者是0,此时RC1管脚都会变成输出低电平。程序如下 //////////////////////////////////////////////////////////////////////////////////// # include <pic.h ...… 查看全部问答∨ |
光谱识别型激光警戒系统怎麽才能和单片机挂钩呢?我大4但对所学知识都没掌握,现在是写毕业设计的开题报告,但又不知道怎麽写,不知道怎麽将单片机这部分的材料放进我要写的东西里去。请高手们指点一二~小弟谢谢大家了… 查看全部问答∨ |
我的2410 5.0BSP包是在4.2基础上移植过来的,谁有S3C2410 5.0标准BSP包,请发到我的邮箱,5iminimao@163.com。不胜感激。… 查看全部问答∨ |
|
采用数码管显示转换的电压 #include "delay.h" #define Num_of_Results 32 static uint results[Num_of_Results]; uchar d[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; uchar d1[11]={0xbf, ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计
- Melexis采用无磁芯技术缩小电流感测装置尺寸
- 千丘智能侍淳博:用数字疗法,点亮“孤独症”儿童的光
- 数药智能冯尚:ADHD数字疗法正为儿童“多动症”提供更有效便捷服务
- Vicor高性能电源模块助力低空航空电子设备和 EVTOL的发展
- 创实技术electronica 2024首秀:加速国内分销商海外拓展之路