embox
1/**
2* @file k210_gpio.c
3* @brief
4* @author sksat <sksat@sksat.net>
5* @version 0.1
6* @date 2020-08-15
7*/
8
9#include <assert.h>10#include <util/log.h>11
12#include <embox/unit.h>13#include <lib/libds/bit.h>14#include <lib/libds/array.h>15
16#include <drivers/gpio/k210/fpioa.h>17#include <drivers/clk/maix_bit_sysctl.h>18#include <config/board_config.h>19
20volatile fpioa_t* const fpioa = (volatile fpioa_t*) CONF_FPIOA_PORT_REGION_BASE;21
22// EMBOX_UNIT_INIT(k210_fpioa_init);
23
24// // TODO: add sysctl driver
25
26// // central clock enable(sysctl: 0x28)
27// volatile sysctl_clock_enable_central* const clk_en_cent = (volatile sysctl_clock_enable_central*) CONF_SYSCTL_REGION_BASE + 0x28;
28// volatile sysctl_clock_enable_peripheral* const clk_en_peri = (volatile sysctl_clock_enable_peripheral*) CONF_SYSCTL_REGION_BASE + 0x2c;
29
30// static int k210_fpioa_init(void){
31
32// // enable bus clock
33// clk_en_cent->apb0 = 1;
34
35// // enable device clock
36// clk_en_peri->fpioa = 1;
37
38// return 0;
39// }
40
41void k210_fpioa_set_func_impl(uint8_t num, k210_fpioa_func_t func){42// TODO: other func43assert(FN_GPIO0 <= func && func <= FN_GPIO7);44
45if(FN_GPIO0 <= func && func <= FN_GPIO7){46fpioa->io[num] = (const k210_fpioa_io_cfg_t){47.channel = func,48.div = 0xf,49.out_enable = 1,50.out_inv = 0,51.data_out = 0,52.data_inv = 0,53.pullup = 0,54.pulldown = 1, // pull down55.reserved = 0,56.slew = 0,57.in_enable = 1,58.in_inv = 0,59.data_in_inv = 0,60.sch_trigger = 1,61.reserved1 = 0,62.pad_di = 0,63};64}65}
66
67void k210_fpioa_set_func(uint8_t num, k210_fpioa_func_t func){68assert(num <= CONF_FPIOA_PORT_WIDTH);69assert(0 <= func && func < FN_MAX);70
71if(func == FN_RESERVED0){72k210_fpioa_set_func_impl(num, FN_RESERVED0);73return;74}75
76for(int i=0;i<CONF_FPIOA_PORT_WIDTH;i++){77if((fpioa->io[i].channel == func) && (i != num)){78k210_fpioa_set_func_impl(num, FN_RESERVED0);79}80}81
82k210_fpioa_set_func_impl(num, func);83}
84
85void k210_fpioa_set_pull(uint8_t num, k210_fpioa_pull_t pull){86// TODO87}
88