栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

GPIO / LED驱动编程开发

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号