GPIOLED驱动编程开发

GPIOLED驱动编程开发,第1张

GPIO / LED驱动编程开发

GPIO / LED---- 驱动开发编程

一般来说,GPIO的Pin都是可选功能的:
GPIO[x] :selects the function of GPIO Pin.
为什么?不要问.

*** 作:
1.将某一个GPIO选择功能复用为GPIO.
2.将该GPIO选择为GPIO输出.
3.控制该管脚输出高/低电平.

C语言回顾:

	1.指针:		
		int a;
		a = 100;
		*(&a) = 100;
		*((int *) 0x10000000) = 100;
		地址 (volatile int *) 0x10000000 
		访问 *(volatile int *) 0x10000000
		
	2.位 *** 作:
		// 错误的 误将其他管脚的功能改变了
		 //应该只改变需要改变的位,其他的位应该保持不变.		
		*(volatile int *) 0x10000000 = 0x01000000; //bit 24位置1,bit 25位置 0 
		// 正确做法 先将 24 25 位置0,再将 24位置1
		 *(volatile int *) 0x10000000 &= 0xfcffffff;   
		 *(volatile int *) 0x10000000 |= 0x01000000;
		 //  标准做法: 
	    *(volatile int *) 0x10000000 &= ~(3 << 24);
	    *(volatile int *) 0x10000000 |= 1 <<  24; 

LED 驱动编程:

#define  GPIOCOUT     (*(volatile unsigned int *)0xc001c000)
#define  GPIOCOUTENB  (*(volatile unsigned int *)0xc001c004)
#define  GPIOALTFN0   (*(volatile unsigned int *)0xc001c000)

void delay (unsigned int);                                                                                                                                                                                                                   

void led_test(void)
{
  
  GPIOALTFN0 &= ~(3 << 24);
  GPIOALTFN0 |= (1 << 24);

  
  GPIOCOUTENB |= (1 << 12);

  while (1) {
      
      GPIOCOUT &= ~(1 << 12);
      delay (0x1000000);

      
      GPIOCOUT |= (1 << 12);
  }
}


void delay (unsigned int n)  
{
  while (n--);
}

总结:
LED驱动程序:
1) 看懂电路原理图:
找到要驱动的硬件和CPU是怎样连接的(管脚)
2) cpu data sheet
特殊功能寄存器是软件驱动硬件的媒介
3) 编辑代码
*((volatile unsigned int *) 0x10000000)
ARM中的特殊功能寄存器都是32bit
*** 作时必须按照4字节 *** 作
*** 作原则:只改变需要改变的bit
可以通过位 *** 作实现
4) 编译代码
arm-cortex…-gcc hello.c -o hello
5) 执行代码
tftp 48000000 bin
go 48000000

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5702717.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存