通过上一篇测评,我们知道RVB2601的代码编写是在YOC平台下。对硬件的操作主要集中在YOC平台里的CSI层。
在CSI层里和GPIO相关的有两个:GPIO和GPIO_PIN。不太清楚这两个的具体区别,但是在头文件中提到这两个模块只能用其中的一个,如下图所示。通过对比两个源文件,可以看出GPIO_PIN模块中调用了很多GPIO模块里的内容,所以我觉得GPIO_PIN模块的功能更复杂一些吧。
在例程里,官方使用的GPIO_PIN操作的IO。
一、输出功能
首先需要对IO进行初始化,初始化部分用到了CSI层的PIN模块,这个模块的主要作用是选择引脚的功能:如作为GPIO用;或者作为外设的引脚,如SPI的SCLK脚。本例是将引脚设置为GPIO。
然后设置GPIO的功能:输入、输出等。
板载了一个三色LED,也就是3个LED封装到了一起,原理图如下。板上通过跳线帽将PA7,PA25,PA4与三色灯连接在了一起,因此需要配置为输出模式。
初始化代码如下:
- static csi_gpio_pin_t r;
- static csi_gpio_pin_t g;
- static csi_gpio_pin_t b;
-
- void led_pinmux_init()
- {
- csi_pin_set_mux(PA7, PIN_FUNC_GPIO);
- csi_pin_set_mux(PA25, PIN_FUNC_GPIO);
- csi_pin_set_mux(PA4, PIN_FUNC_GPIO);
-
- csi_gpio_pin_init(&r, PA7);
- csi_gpio_pin_dir(&r, GPIO_DIRECTION_OUTPUT);
- csi_gpio_pin_init(&g, PA25);
- csi_gpio_pin_dir(&g, GPIO_DIRECTION_OUTPUT);
- csi_gpio_pin_init(&b, PA4);
- csi_gpio_pin_dir(&b, GPIO_DIRECTION_OUTPUT);
-
- csi_gpio_pin_write(&r, GPIO_PIN_HIGH);
- csi_gpio_pin_write(&g, GPIO_PIN_HIGH);
- csi_gpio_pin_write(&b, GPIO_PIN_HIGH);
- }
注意,每一个GPIO都要有一个自己的数据结构,csi_gpio_pin_t 。
二、输入功能
输入功能和输出功能的用法相似,代码如下:
- static csi_gpio_pin_t key1;
- static csi_gpio_pin_t key2;
- void key_init()
- {
- csi_pin_set_mux(PA11, PIN_FUNC_GPIO);
- csi_pin_set_mux(PA12, PIN_FUNC_GPIO);
-
- csi_gpio_pin_init(&key1, PA11);
- csi_gpio_pin_init(&key2, PA12);
-
- csi_gpio_pin_dir(&key1, GPIO_DIRECTION_INPUT);
- csi_gpio_pin_dir(&key2, GPIO_DIRECTION_INPUT);
-
- csi_gpio_pin_mode(&key1,GPIO_MODE_PULLNONE);
- csi_gpio_pin_mode(&key2,GPIO_MODE_PULLNONE);
- }
|