blob: 9d61d85f98389956408903459572f1f6930796d5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include "addrmap.h"
#include "utils.h"
#include "gpio.h"
void gpio_init() { REG_WRITE_BITMAP_CLEAR(RESETS_BASE, 32);} // Reset bank0 (all gpios)
void gpio_set_function(u8 gpio, u8 fn){
REG_WRITE(IO_BANK0_GPIO25_CTRL, fn); // Set function as SIO
}
void gpio_output_enable(u8 gpio){
u32 r=REG_READ(SIO_GPIO_OE)|1<<gpio;
REG_WRITE(SIO_GPIO_OE, r);
}
void gpio_toggle_state(u8 gpio){
REG_WRITE(SIO_GPIO_OUT_XOR,1<<gpio);
}
void gpio_toggle_led(){
// Ensure led pin is configured
u32 fn=REG_READ(IO_BANK0_GPIO25_CTRL);
u32 oe=REG_READ(SIO_GPIO_OE)&1<<25;
if(fn!=GPIO_FN_SIO || !oe){
gpio_set_function(25, GPIO_FN_SIO);
gpio_output_enable(25);
}
gpio_toggle_state(25); // Switch between ON/OFF
}
void gpio_blink_led(int n){
for(int i=0;i<n;i++){
gpio_toggle_led();
for(int j=0;j<5000000;j++){} // These are disgusting but I am lazy..
gpio_toggle_led();
for(int j=0;j<5000000;j++){}
}
}
|