mirror of
https://github.com/laanwj/k210-sdk-stuff.git
synced 2024-11-24 18:36:19 +04:00
rust: clean up FPIOA interface
Remove need for .into() everywhere by accepting everything that goes into usize in the appropriate methods.
This commit is contained in:
parent
1630dc2a31
commit
00ac503e3e
@ -27,16 +27,16 @@ pub const GRID_HEIGHT: usize = DISP_HEIGHT / BLK_SIZE;
|
||||
/** Connect pins to internal functions */
|
||||
fn io_mux_init() {
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(io::LCD_RST.into(), fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_function(io::LCD_RST, fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
/* I2C0 for touch-screen */
|
||||
fpioa::set_function(io::I2C1_SCL.into(), fpioa::function::I2C0_SCLK);
|
||||
fpioa::set_function(io::I2C1_SDA.into(), fpioa::function::I2C0_SDA);
|
||||
fpioa::set_function(io::I2C1_SCL, fpioa::function::I2C0_SCLK);
|
||||
fpioa::set_function(io::I2C1_SDA, fpioa::function::I2C0_SDA);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
}
|
||||
|
@ -24,22 +24,22 @@ pub type ScreenImage = [u32; DISP_WIDTH * DISP_HEIGHT / 2];
|
||||
/** Connect pins to internal functions */
|
||||
fn io_init() {
|
||||
/* Init DVP IO map and function settings */
|
||||
fpioa::set_function(io::DVP_RST.into(), fpioa::function::CMOS_RST);
|
||||
fpioa::set_function(io::DVP_PWDN.into(), fpioa::function::CMOS_PWDN);
|
||||
fpioa::set_function(io::DVP_XCLK.into(), fpioa::function::CMOS_XCLK);
|
||||
fpioa::set_function(io::DVP_VSYNC.into(), fpioa::function::CMOS_VSYNC);
|
||||
fpioa::set_function(io::DVP_HSYNC.into(), fpioa::function::CMOS_HREF);
|
||||
fpioa::set_function(io::DVP_PCLK.into(), fpioa::function::CMOS_PCLK);
|
||||
fpioa::set_function(io::DVP_SCL.into(), fpioa::function::SCCB_SCLK);
|
||||
fpioa::set_function(io::DVP_SDA.into(), fpioa::function::SCCB_SDA);
|
||||
fpioa::set_function(io::DVP_RST, fpioa::function::CMOS_RST);
|
||||
fpioa::set_function(io::DVP_PWDN, fpioa::function::CMOS_PWDN);
|
||||
fpioa::set_function(io::DVP_XCLK, fpioa::function::CMOS_XCLK);
|
||||
fpioa::set_function(io::DVP_VSYNC, fpioa::function::CMOS_VSYNC);
|
||||
fpioa::set_function(io::DVP_HSYNC, fpioa::function::CMOS_HREF);
|
||||
fpioa::set_function(io::DVP_PCLK, fpioa::function::CMOS_PCLK);
|
||||
fpioa::set_function(io::DVP_SCL, fpioa::function::SCCB_SCLK);
|
||||
fpioa::set_function(io::DVP_SDA, fpioa::function::SCCB_SDA);
|
||||
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(io::LCD_RST.into(), fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_function(io::LCD_RST, fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
|
||||
|
@ -104,16 +104,16 @@ impl Universe {
|
||||
/** Connect pins to internal functions */
|
||||
fn io_mux_init() {
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(io::LCD_RST.into(), fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_function(io::LCD_RST, fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
/* I2C0 for touch-screen */
|
||||
fpioa::set_function(io::I2C1_SCL.into(), fpioa::function::I2C0_SCLK);
|
||||
fpioa::set_function(io::I2C1_SDA.into(), fpioa::function::I2C0_SDA);
|
||||
fpioa::set_function(io::I2C1_SCL, fpioa::function::I2C0_SCLK);
|
||||
fpioa::set_function(io::I2C1_SDA, fpioa::function::I2C0_SDA);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
}
|
||||
|
@ -25,12 +25,12 @@ use k210_console::palette_xterm256::PALETTE;
|
||||
/** Connect pins to internal functions */
|
||||
fn io_mux_init() {
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(io::LCD_RST.into(), fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_function(io::LCD_RST, fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ pub const OV2640_ADDR: u8 = 0x60;
|
||||
|
||||
/** I/O pins for FPIOA */
|
||||
#[derive(Copy, Clone)]
|
||||
#[repr(u32)]
|
||||
pub enum io {
|
||||
/** JTAG TCK */
|
||||
JTAG_TCK = 0,
|
||||
@ -131,8 +130,8 @@ pub enum io {
|
||||
DVP_PCLK = 47,
|
||||
}
|
||||
|
||||
impl From<io> for u8 {
|
||||
impl From<io> for usize {
|
||||
fn from(io: io) -> Self {
|
||||
io as u8
|
||||
io as usize
|
||||
}
|
||||
}
|
||||
|
@ -349,17 +349,17 @@ static FUNCTION_DEFAULTS: &[u32] = &[
|
||||
0x00001ff8, 0x00001ff9, 0x00001ffa, 0x00001ffb, 0x00001ffc, 0x00001ffd, 0x00001ffe, 0x00001fff,
|
||||
];
|
||||
|
||||
pub fn set_function(number: u8, function: function) {
|
||||
pub fn set_function<N: Into<usize>>(number: N, function: function) {
|
||||
// TODO: check for overlapping assignments and assign to RESV0 as the Kendryte SDK does?
|
||||
unsafe {
|
||||
let ptr = pac::FPIOA::ptr();
|
||||
(*ptr).io[number as usize].write(|w| w.bits(FUNCTION_DEFAULTS[function as usize]));
|
||||
(*ptr).io[number.into()].write(|w| w.bits(FUNCTION_DEFAULTS[function as usize]));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_io_pull(number: u8, pull: pull) {
|
||||
pub fn set_io_pull<N: Into<usize>>(number: N, pull: pull) {
|
||||
unsafe {
|
||||
(*pac::FPIOA::ptr()).io[number as usize].modify(|_, w| match pull {
|
||||
(*pac::FPIOA::ptr()).io[number.into()].modify(|_, w| match pull {
|
||||
pull::NONE => w.pu().bit(false).pd().bit(false),
|
||||
pull::DOWN => w.pu().bit(false).pd().bit(true),
|
||||
pull::UP => w.pu().bit(true).pd().bit(false),
|
||||
|
@ -24,12 +24,12 @@ use crate::palette::PALETTE;
|
||||
/** Connect pins to internal functions */
|
||||
fn io_mux_init() {
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(io::LCD_RST.into(), fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_function(io::LCD_RST, fpioa::function::gpiohs(lcd::RST_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
}
|
||||
|
@ -31,25 +31,25 @@ const B_SCALE: f32 = 0.33;
|
||||
fn io_init() {
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(
|
||||
io::LCD_RST.into(),
|
||||
io::LCD_RST,
|
||||
fpioa::function::gpiohs(lcd::RST_GPIONUM),
|
||||
);
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
/* Route PWM outputs of TIMER0 to RGB leds */
|
||||
fpioa::set_function(io::LED_R as u8, fpioa::function::TIMER0_TOGGLE1);
|
||||
fpioa::set_function(io::LED_G as u8, fpioa::function::TIMER0_TOGGLE2);
|
||||
fpioa::set_function(io::LED_B as u8, fpioa::function::TIMER0_TOGGLE3);
|
||||
fpioa::set_function(io::LED_R, fpioa::function::TIMER0_TOGGLE1);
|
||||
fpioa::set_function(io::LED_G, fpioa::function::TIMER0_TOGGLE2);
|
||||
fpioa::set_function(io::LED_B, fpioa::function::TIMER0_TOGGLE3);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
|
||||
/* I2C0 for touch-screen */
|
||||
fpioa::set_function(io::I2C1_SCL.into(), fpioa::function::I2C0_SCLK);
|
||||
fpioa::set_function(io::I2C1_SDA.into(), fpioa::function::I2C0_SDA);
|
||||
fpioa::set_function(io::I2C1_SCL, fpioa::function::I2C0_SCLK);
|
||||
fpioa::set_function(io::I2C1_SDA, fpioa::function::I2C0_SDA);
|
||||
|
||||
/* Set DVP and SPI pins to 1.8V */
|
||||
sysctl::set_power_mode(sysctl::power_bank::BANK6, sysctl::io_power_mode::V18);
|
||||
|
@ -29,10 +29,10 @@ fn main() -> ! {
|
||||
// Configure UART1 (→WIFI)
|
||||
sysctl::clock_enable(sysctl::clock::UART1);
|
||||
sysctl::reset(sysctl::reset::UART1);
|
||||
fpioa::set_function(io::WIFI_RX as u8, fpioa::function::UART1_TX);
|
||||
fpioa::set_function(io::WIFI_TX as u8, fpioa::function::UART1_RX);
|
||||
fpioa::set_function(io::WIFI_EN as u8, fpioa::function::GPIOHS8);
|
||||
fpioa::set_io_pull(io::WIFI_EN as u8, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::WIFI_RX, fpioa::function::UART1_TX);
|
||||
fpioa::set_function(io::WIFI_TX, fpioa::function::UART1_RX);
|
||||
fpioa::set_function(io::WIFI_EN, fpioa::function::GPIOHS8);
|
||||
fpioa::set_io_pull(io::WIFI_EN, fpioa::pull::DOWN);
|
||||
gpiohs::set_pin(8, true);
|
||||
gpiohs::set_direction(8, gpio::direction::OUTPUT);
|
||||
let mut wifi_serial = p.UART1.constrain(DEFAULT_BAUD.bps(), &clocks);
|
||||
|
@ -65,14 +65,14 @@ where
|
||||
fn io_init() {
|
||||
/* Init SPI IO map and function settings */
|
||||
fpioa::set_function(
|
||||
io::LCD_RST.into(),
|
||||
io::LCD_RST,
|
||||
fpioa::function::gpiohs(lcd::RST_GPIONUM),
|
||||
);
|
||||
fpioa::set_io_pull(io::LCD_RST.into(), fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC.into(), fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC.into(), fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS.into(), fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR.into(), fpioa::function::SPI0_SCLK);
|
||||
fpioa::set_io_pull(io::LCD_RST, fpioa::pull::DOWN); // outputs must be pull-down
|
||||
fpioa::set_function(io::LCD_DC, fpioa::function::gpiohs(lcd::DCX_GPIONUM));
|
||||
fpioa::set_io_pull(io::LCD_DC, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::LCD_CS, fpioa::function::SPI0_SS3);
|
||||
fpioa::set_function(io::LCD_WR, fpioa::function::SPI0_SCLK);
|
||||
|
||||
sysctl::set_spi0_dvp_data(true);
|
||||
|
||||
@ -97,10 +97,10 @@ fn main() -> ! {
|
||||
// Configure UART1 (→WIFI)
|
||||
sysctl::clock_enable(sysctl::clock::UART1);
|
||||
sysctl::reset(sysctl::reset::UART1);
|
||||
fpioa::set_function(io::WIFI_RX as u8, fpioa::function::UART1_TX);
|
||||
fpioa::set_function(io::WIFI_TX as u8, fpioa::function::UART1_RX);
|
||||
fpioa::set_function(io::WIFI_EN as u8, fpioa::function::GPIOHS8);
|
||||
fpioa::set_io_pull(io::WIFI_EN as u8, fpioa::pull::DOWN);
|
||||
fpioa::set_function(io::WIFI_RX, fpioa::function::UART1_TX);
|
||||
fpioa::set_function(io::WIFI_TX, fpioa::function::UART1_RX);
|
||||
fpioa::set_function(io::WIFI_EN, fpioa::function::GPIOHS8);
|
||||
fpioa::set_io_pull(io::WIFI_EN, fpioa::pull::DOWN);
|
||||
gpiohs::set_pin(8, true);
|
||||
gpiohs::set_direction(8, gpio::direction::OUTPUT);
|
||||
let wifi_serial = p.UART1.constrain(DEFAULT_BAUD.bps(), &clocks);
|
||||
|
Loading…
Reference in New Issue
Block a user