资讯详情

ARM平台FS6818/s5p6818开发板实验1 —— LED灯实验

实验内容:

编写GPIO实现正确的模块程序FS_6818平台的上的LED灯实现。

实验目的:

熟悉开发环境的使用。

掌握FS6818处理器GPIO功能使用。

实验平台:

FS6818开发板,Ubuntu, secureCRT

实验1 LED灯实验

  1. 分析电路图

PCB板:印刷电路板

sheet:原理图

FS6818底板原理图.pdf ----------》 对应底板的原理图

FS6818核心板原理图.pdf ---------》 核心板对应的原理图

  1. 在PCB板上找到LED灯对应器件的位置在LED灯具旁边

与设备对应的唯一编号RGBLED1”。

专业术语:开发板上的白色编号称为丝印,用于识别设备。

每个器件的丝印在PCB板是唯一的。丝印在开发板原理图上,

对应关系是唯一的。

  1. 在原理图上搜索丝印,找到LED灯对应的原理图。

专业术语::网络标号。

功能:网络标号相同的两个引脚具有电气连接属性,反映在PCB板上,

说明两个引脚通过导线连接。

三极管:

三极管特性:放大特性、开关特性。

NPN:基极高电平时,CE导通,基极低电平时,CE截止

PNP:基极高电平时,EC截止日期,基极低电平时,EC导通

MCU_CAM1_PCLK应连接到网络标号SOC(S5P6818)的的一个GPIO引脚上。

在原理图底板上搜索MCU_CAM1_PCLK”网络标号

继续搜索核心板原理图MCU_CAM1_PCLK网络标号,找到以下信息:

红色通过以上分析LED灯由SOC的GPIOA28引脚驱动。

编写程序让GPIOA28引脚输出高电平,点亮红色LED灯,

让GPIOA28引脚输出低电平,熄灭红色LED灯,

芯片引脚多功能复用引脚:

引脚有多种功能,称为多功能复用引脚。

使用此引脚时,选择功能使用。

  1. 分析芯片手册

S5P在芯片手册15中,6818芯片的内存映射图.3.3章节:

分析芯片手册GPIO章节:

  1. 设置GPIO引脚为GPIO功能
  2. 设置GPIO引脚为输出功能
  3. 设置GPIO引脚输出高低电平

S5P6818总共有160个GPIO将这160个引脚分成5组,每组32个引脚,

分别为GPIOA,GPIOB,GPIOC,GPIOD,GPIOE。

  1. GPIOxOUT寄存器分析

功能:设置GPIO引脚输出高低电平的

GPIOAOUT地址 = 基地址+偏移地址 = 0xC001_A000

GPIOAOUT这个寄存器管理这GPIOA这一组的32个引脚。引脚编号从0-31

因此:

GPIOAOUT[0]  -----》GPIOA0

GPIOAOUT[1]  -----》GPIOA1

GPIOAOUT[2]  -----》GPIOA2

。。。。。。

GPIOAOUT[28]  -----》GPIOA28

。。。。。。

GPIOAOUT[31]  -----》GPIOA31

 

GPIOAOUT寄存器对应的地址0xC001_A000,

给这个地址的28位写1,GPIOA28引脚输出高电平,

给这个地址的28位写0,GPIOA28引脚输出低电平。

 

 

  1. GPIOxOUTENB寄存器分析

功能:设置GPIO引脚为输入模式换是输出模式

GPIOAOUTENB地址 = 基地址+偏移地址 = 0xC001_A004

GPIOAOUTENB这个寄存器管理这GPIOA这一组的32个引脚。引脚编号从0-31

因此:

GPIOAOUTENB[0]  -----》GPIOA0

GPIOAOUTENB[1]  -----》GPIOA1

GPIOAOUTENB[2]  -----》GPIOA2

。。。。。。

GPIOAOUTENB[28]  -----》GPIOA28

。。。。。。

GPIOAOUTENB[31]  -----》GPIOA31

 

GPIOAOUTENB寄存器对应的地址0xC001_A004,

给这个地址的28位写1,GPIOA28引脚为输出模式,

给这个地址的28位写0,GPIOA28引脚为输入模式。

  1. GPIOAALTFN0和GPIOAALTFN1寄存器详解

功能:设置GPIO引脚功能选择寄存器

GPIOAALTFN0地址 = 基地址+偏移地址 = 0xC001_A020

 

GPIOAALTFN1地址 = 基地址+偏移地址 = 0xC001_A024

 

GPIOAALTFN0这个寄存器管理着GPIOA这一组的[15:0]引脚。

GPIOAALTFN1这个寄存器管理着GPIOA这一组的[31:16]引脚。

因此:

GPIOAALTFN0[1:0]  -----》GPIOA0

GPIOAALTFN0[3:2]  -----》GPIOA1

。。。。。。

GPIOAALTFN0[31:30]  -----》GPIOA15

 

GPIOAALTFN1[1:0]  -----》GPIOA16

GPIOAALTFN1[3:2]  -----》GPIOA17

。。。。。。

GPIOAALTFN1[31:30]  -----》GPIOA31

 

GPIOAALTFN1寄存器对应的地址0xC001_A024,

给这个地址的[25:24]位写0b00,GPIOA28引脚为GPIO功能,

在S5P6818芯片手册中搜索GPIOA28即可。

 

  1. 编写代码

 

  1. 下载调试

1》拷贝led灯的可执行文件.bin文件到windows

 

2》 开发板硬件连接

        1. 电源线插上
        2. 串口线,USB端链接电脑,串口端链接开发板的UART0端口

3》设置开发板的启动方式

       EMMC启动 :1-ON  2-OFF 3-ON

       SD/TF卡启动:1-OFF  2-OFF 3-OFF

4》打开SecureCRT串口工具

 

5》开发板上电,在串口工具上会打印很多信息,最后出现一个倒计时,在倒计时减到0之前按任意键,进入一下界面。

6》下载程序

7》观察LED灯到的现象

如果需要重复下载程序,重步骤5,6即可。

main.c


// 寄存器的声明
#define  uint32_t  unsigned int 
typedef struct{
	uint32_t OUT;
	uint32_t OUTENB;
	uint32_t DETMODE0;
	uint32_t DETMODE1;
	uint32_t INTENB;
	uint32_t DET;
	uint32_t PAD;
	uint32_t RSVD;
	uint32_t ALTFN0;
	uint32_t ALTFN1;
}gpio_t;

#define  GPIOA (*(volatile gpio_t*)0xC001A000)
#define  GPIOB (*(volatile gpio_t*)0xC001B000)
#define  GPIOC (*(volatile gpio_t*)0xC001C000)
#define  GPIOD (*(volatile gpio_t*)0xC001D000)
#define  GPIOE (*(volatile gpio_t*)0xC001E000)


typedef enum{
	LED_OFF = 0,
	LED_ON,
}stu_t;

void delay_ms(unsigned int ms)
{
	unsigned int i,j;
	for(i = 0; i < ms; i++)
		for(j = 0; j < 1800; j++);
}

void hal_led_init(void)
{
	// GPIO引脚为GPIO功能
	// GPIO引脚为输出功能
	// RED   GPIOA28
	GPIOA.ALTFN1 = GPIOA.ALTFN1 & (~(0x3 << 24));
	GPIOA.OUTENB = GPIOA.OUTENB | (1 << 28);
	// GREEN  GPIOE13
	GPIOE.ALTFN0 = GPIOE.ALTFN0 & (~(0x3 << 26));
	GPIOE.OUTENB = GPIOE.OUTENB | (1 << 13);
	
	// BLUE  GPIOB12
	GPIOB.ALTFN0 = GPIOB.ALTFN0 & (~(0x3 << 24));
	GPIOB.ALTFN0 = GPIOB.ALTFN0 | (0x2 << 24);
	GPIOB.OUTENB = GPIOB.OUTENB | (1 << 12);	
}

void hal_red_led_stutes(stu_t stu)
{
	if (stu == LED_ON){
		//点亮
		GPIOA.OUT |= (1 << 28);
	}
	else {
		// 熄灭
		GPIOA.OUT &= (~(1 << 28));
	}
}
void hal_green_led_stutes(stu_t stu)
{
	if (stu == LED_ON){
		//点亮
		GPIOE.OUT |= (1 << 13);
	}
	else {
		// 熄灭
		GPIOE.OUT &= (~(1 << 13));
	}

}
void hal_blue_led_stutes(stu_t stu)
{
	if (stu == LED_ON){
		//点亮
		GPIOB.OUT |= (1 << 12);
	}
	else {
		// 熄灭
		GPIOB.OUT &= (~(1 << 12));
	}

}

int main()
{
	hal_led_init();
	while(1)
	{
		// 三色LED灯交替闪烁
		hal_red_led_stutes(LED_ON);
		delay_ms(500);
		hal_red_led_stutes(LED_OFF);
		delay_ms(500);

		hal_green_led_stutes(LED_ON);
		delay_ms(500);
		hal_green_led_stutes(LED_OFF);
		delay_ms(500);
		
		hal_blue_led_stutes(LED_ON);
		delay_ms(500);
		hal_blue_led_stutes(LED_OFF);
		delay_ms(500);
	}
	return 0;
}

 

标签: 丝印j3的三极管

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台