TQ2440裸板---流水灯(详细注释)

本文详细介绍如何使用S3C2440处理器通过GPB寄存器控制LED灯。从查找LED管脚到配置寄存器,再到提供实际代码示例,一步步引导读者完成LED灯的点亮过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

附件和代码:

相关手册和原理图 

led_c.rar 


   所有的裸板程序,都是要根据手册来编写。


   那要控制灯的开关的话,

   就要先找到相关管脚,再找控制管脚的寄存器,最后配置参数。

   (1)找控制灯的管脚,
   (2)找控制管脚的寄存器
   (3)配置参数



那么我们的步骤就是这样

1.底板原理图,去找到这些管脚,ctrl+f全盘搜索led

      






2.在核心板原理图,找控制这些脚的寄存器,ctrl+f全盘搜索nled

     






3.最后发觉原来控制led的寄存器是GPB寄存器!!


   那么我们应该继续去s3c2440手册,找这个寄存器,找到他们的寄存器的控制方式,ctrl+f全盘搜索GPB:

   

    






4.发觉:

  GPBCON:是控制输入输出等其他的控制方式

  GPBDAT:是控制数据,高低电平

  GPBUP  :是控制上下拉电阻

      


5. 按照上面那一幅图来说的话,由于右端已经是高电平了,

    根据二极管特性,只要把左边置地的话,电流就会导通,

    那么二极管就会发亮的了。

    那我们现在就产生对寄存器有2个主要的步骤:


   1.GPBCON设置为输出的控制方式

   2.GPBDAT设置为置地,即低电平

 


   参考代码:

   流水灯:

led.s:

          AREA led, CODE, READONLY
          ENTRY
          IMPORT main
start
          ldr sp, =0x34000000
 
          bl main
         
loop
          b loop
           END



led_c.c:

#define GPBCON  (*(volatile unsigned long*)0x56000010)
#define GPBDAT  (*(volatile unsigned long*)0x56000014)
#define GPBUP   (*(volatile unsigned long*)0x56000018)
#define WATCHDOG (*(volatile unsigned long*)0x53000000)

void wait(unsigned long num)
{
	for(; num > 0; num--);
}


int main(void) 
{
	unsigned long i = 1;
	unsigned long j = 5;
        GPBCON &= ~((3<<10)|(3<<12)|(3<<14)|(3<<16));//清零,避免:GPBCON本来是"10",出现相或变成"11"的这种情况
        GPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);//设置为输出端口,不改变其它位的内容

	WATCHDOG = 0;//关了看门狗,要不可能会出现自动复位。 
                     //可以自行测试:注释上面一行,看流水灯流,循环流几次就会出现状况的了
	while(1)//循环流水灯
	{
		wait(30000);
		
		GPBDAT = (~(i<<j));//设置灯变为低电平,不改变其它位的的内容	
		if(j > 7)
			j = 5;
		else j = j + 1;
	
	}
	return 0;	
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值