龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库。git地址:https://gitee.com/caogos/OpenLoongsonLib1c
本文首先以一个例子介绍“龙芯1c库”中gpio接口是怎样使用的,然后再详细讲解是怎样封装这些接口的。
龙芯1c库中gpio接口使用示例
gpio接口简介
龙芯1c库提供3个接口,分别是gpio_init(),gpio_set()和gpio_get()。
使用步骤为,先使用gpio_init()初始化对应的gpio,然后使用gpio_set()在gpio上输出高低电平,或者使用gpio_get()读取gpio上的电平值。
测试思路
使用led测试gpio输出,选择了GPIO6,GPIO32,GPIO74三个引脚来测试。
用按键测试gpio输入,采用不断读取gpio的方式,一旦发现按键按下,则指示灯点亮,否则指示灯熄灭。按键所在引脚为GPIO85(智龙v2.0和v2.1上的按键S3),指示灯为GPIO32。
在智龙首发版、v2.0和v2.1上gpio32都接有led,并且都可控。
代码清单
app\main.c
#include "../lib/gpio.h"
#include "../lib/clock.h"
#include "led.h"
/*
* 测试库中gpio作为输出时的相关接口
* led闪烁10次
*/
void gpio_test_output(void)
{
int i;
unsigned int gpio = 32; // 智龙首发版、v2.0和v2.1都有这个led
// unsigned int gpio = 6;
// unsigned int gpio = 74;
// 初始化
gpio_init(gpio, gpio_mode_output);
// 输出10个矩形波,如果gpio50上有led,则可以看见led闪烁10次
for (i=0; i<10; i++)
{
gpio_set(gpio, gpio_level_low);
delay();
gpio_set(gpio, gpio_level_high);
delay();
}
return ;
}
/*
* 测试库中gpio作为输入时的相关接口
* 按键按下时,指示灯点亮,否则,熄灭
*/
void gpio_test_input(void)
{
unsigned int key_gpio = 85; // GPIO85/I2C_SDA0,智龙v2.1上的按键S3
unsigned int led_gpio = 32; // 用于当按键被按下时,此led点亮,否则熄灭
// 初始化
gpio_init(key_gpio, gpio_mode_input);
led_init(led_gpio);
while (1)
{
if (gpio_level_low != gpio_get(key_gpio))
continue; // 按键没有按下
// 延时(软件消抖)后再次确认按键是否按下
delay();
if (gpio_level_low != gpio_get(key_gpio))
continue; // 按键没有按下
// 点亮指示灯
led_on(led_gpio);
// 等待释放按键
while (gpio_level_high != gpio_get(key_gpio))
;
delay();
// 熄灭指示灯
led_off(led_gpio);
}
}
int main(void)
{
/*
* 测试库中gpio作为输出时的相关接口
* led闪烁10次
*/
gpio_test_output();
/*
* 测试库中gpio作为输入时的相关接口
* 按键按下时,指示灯点亮,否则,熄灭
*/
gpio_test_input();
return(0);
}
更完整的代码清单,请查看http://git.oschina.net/caogos/OpenLoongsonLib1c的提交记录