/*led_asm_c.c*/
#define rGPFCON (*(volatile unsigned *)0x56000050) //Port F control
#define rGPFDAT (*(volatile unsigned *)0x56000054) //Port F data
#define rGPFUP (*(volatile unsigned *)0x56000058) //Pull-up control F
//GPFCON 8口的
extern int delay(int time); /*声明汇编函数*/
int main()
{
/*设置 GPFCON*/
rGPFCON &= 0x00ff; //GPF4 - 7置为 0
rGPFCON |= 0x55ff; //GPF4 - 7置为 output
/*设置 GPFUP*/
rGPFUP |= 0xff00;
while(1)
{
/*亮灯 GPF4*/
rGPFDAT |= 0xf0; //GPF4 - 7置为 1
rGPFDAT &= 0xe0; //GPF4置为 0
delay(0x1ffffff); //调用汇编程序写的延时程序
/*亮灯 GPF5*/
rGPFDAT |= 0xf0; //GPF4 - 7置为 1
rGPFDAT &= 0xd0; //GPF5置为 0
delay(0x1ffffff); //调用汇编程序写的延时程序
/*亮灯 GPF6*/
rGPFDAT |= 0xf0; //GPF4 - 7置为 1
rGPFDAT &= 0xb0; //GPF6置为 0
delay(0x1ffffff); //调用汇编程序写的延时程序
/*亮灯 GPF7*/
rGPFDAT |= 0xf0; //GPF4 - 7置为 1
rGPFDAT &= 0x70; //GPF7置为 0
delay(0x1ffffff); //调用汇编程序写的延时程序
}
}
;delay.s
EXPORT delay
AREA delay1,CODE ,READONLY ;该伪指令定义了一个代码段 delay1这个名字要注意
;下面延时子程序
ENTRY
delay
;传一个参数 ,参数放到 r0
sub r0 ,r0 ,#1
cmp r0 ,#0x0
bne delay ;result is not 0 and continue delay
mov pc ,lr ;return
END; //end
关键字:s3c2440 跑马灯 汇编代码
引用地址:
s3c2440 --跑马灯 C+汇编代码
推荐阅读最新更新时间:2024-03-16 15:26
S3C2440的PWM及定时器的使用
s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,即他们都有个输出引脚,可以通过定时器来控制引脚周期性的高低电平变化,定时器4没有输出引脚。上次脱机运行PWM测试程序实验的时候就用到了这块,所以这次将PWM和定时器放在一起来学习。 定时器部件的时钟源为PCLK,首先通过两个8位预分频器降低频率,定时器0和1共用第一个预分频器,2,3,4共用第二个预分频器。预分频器输出接入第二级分频器,可以生成5种分频信号(1/2,1/4,1/8,1/16,TCLK),其中8位预分频器是可编程,根据装载值来分频PCLK,值储存在TCFG0和TCFG1中。 定时器内部控制逻辑工作流
[单片机]
S3C2440存储控制器的地址空间与MMU分析介绍
一、S3C2440存储控制器 如果大家写过S3C2440的ARM裸机程序都应该知道通常SDRAM的起始地址是0X30000000,但是大家有没有想过为什么呢?下面我将给大家做一个简要的介绍。 查S3C2440的手册可知S3C2440可寻址1G的地址范围,但是S3C2440的地址线只有27根,理论上只能寻址2的27次方等于128M的地址范围。于是S3C2440通过一个叫BANK的东东解决了这个问题。S3C2440引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,这样S3C2440最多就可以连接8个128M的存储器,只要在某一时刻只选通一个BANK就可以实现1G的寻址空间每个BANK有个
[单片机]
s3c2410/s3c2440串口波特率的计算
要正确计算串口波特率,首先要搞清楚芯片的时钟工作原理,这部分在s3c2410/s3c2440datasheet上写的比较详细,但对新手来说结合thisway同志“s3c2410完全开发流程”中的TIMER和CLOCK两个实验,边做实验边看资料,更容易理解。 我这里只根据我的失败经验谈一下设置波特率寄存器UBRDIVn的值的计算要注意的一个问题。 datasheet上UBRDIVn寄存器部分写着: UART BAUD RATE DIVISOR REGISTER There are three UART baud rate divisor registers including UBRDIV0, UBRDIV1 and U
[单片机]
记录1--s3c2440 GPIO && UART的控制
一.初始化对应的UART void Uart_Init(int pclk, int baud) { if(pclk == 0) pclk = PCLK; if(UartNum==0) //判断是否使用UART0 { rGPHCON = rGPHCON & (~(0xffff)); //UART0: RXD0 == GPH3 TXD0 == GPH2 rGPHCON = rGPHCON | (0xaaa0) ; //设置GPH端口为UART口 rGPHUP = 0x0; //使能上拉功能 rUFCON0=0x0; // 不使用FIFO rUMCON
[单片机]
ARM裸机学习二:S3C2440的串口使用
1.串口的初始化(仅使用基本功能) 1.首先设置复用引脚,以串口0为例,RXD代表接受数据的引脚,TXD代表发送数据的引脚,这两个是复用引脚,需要在GPHCON寄存器中设置引脚复用 2.设置GPH的上拉 3.设置UCON0寄存器,简单的串口功能需要设置: 第10,11位,选择时钟源,这里可以设置00或者01来选择PCLK; 第0,1位,选择接收模式,这里设置成01,也就是中断或查询模式 第2,3位,选择发送模式,这里设置成01,也就是中断或查询模式 4.设置波特率,通过设置UBRDIV0寄存器来设置,设置的值的计算公式为: UBRDIVn = (int)( UART 时钟 / ( 波特率 × 16) ) –1 这里的 UART
[单片机]
关于S3C2440存储器地址分配和启动流程分析
学习嵌入式,最开始应该了解就是地址空间的分配,真正搞清楚每个地址代表的位置,才有了入门的基础。 1、地址分配(27根线如何寻找1G空间) S3C2440集成了丰富了外设控制器(LCD控制器、USB Device控制器、USB Host控制器、NAND FLASH控制器、I2C控制器、SPI控制器等)。要控制这些外设就要设置相应控制器的寄存器以产生相应的驱动时序。学习S3C2440,主要是如何配置寄存器。 下面是S3C2440特殊功能寄存器地址: #define rBANKCON0 (*(volatileunsigned *)0x48000004) //Boot ROM control #define rBANKCON1 (*(vo
[单片机]
利用S3C2440中的Timer0的PWM输出驱动蜂鸣器
S3C2440中有5个16位定时器,timer0,timer1,timer2,timer3和timer4。其中,只有timer4是一个没有输出引脚的内部定时器。所以,只有定时器0,1,2,3有脉宽调制功能(PWM)。定时器0有一个用于大电流设备的死区生成器。(以下,以定时器0为例) S3C2440的PWM输出,主要是利用比较寄存器TCMPB0(0x51000010)。 在定时器使能时,定时器计数缓存寄存器(TCNTBn)得到一个被装载到递减计数器中的初始值。定时器比较缓存寄存器(TCMPBn)有一个被装载比较器中用来和递减计数器得值作比较的初始值。 每个定时器有一个自己的由定时器时钟驱动的16位递减计数器。当递减计数器
[单片机]
基于S3C2440嵌入式系统主板的电磁兼容性设计
随着电子设备的频率越来越高,世界各国对电子产品电磁辐射标准的执行变得越来越严格,如何保证能在有限时间很好地在设计阶段发现并解决EMI/EMC问题非常重要,而PCB往往是一个电子系统的核心构成部分,一个经仔细电磁干扰设计的PCB板,能大幅度降低阻抗不匹配、传输线问题、信号互相耦合等现象引发的信号反射、延迟等线路不稳定因素,同时也可达到降低电磁辐射发射干扰,大大提高系统的稳定性和可靠性。本文将以嵌入式系统主板为平台,运用 EMIStream仿真软件,并采用源端串联端接阻抗的方法分析了解决嵌入式高速主板存在的电磁干扰问题。 1 电磁兼容性 1.1 电磁兼容和电磁干扰 电磁兼容(electro magnetic compatibi
[单片机]