static void spi1_ios(void) { u32 val; reg_set(RCC_APB2ENR, 0x04); /* Activate GPIOA */ /* Configure NSS pin (PA4) */ val = reg_rd(GPIOA); val &= 0xFFF0FFFF; val |= 0x00030000; /* output, 50MHz, push-pull */ reg_wr(GPIOA, val); reg_wr(GPIO_BSRR(GPIOA), (0x01 << 4)); /* Disable SS (nss=1) */ /* Configure SCK pin (PA5) */ val = reg_rd(GPIOA); val &= 0xFF0FFFFF; val |= 0x00B00000; /* output, 50MHz, AF, push-pull */ reg_wr(GPIOA, val); /* Configure MOSI pin (PA7) */ val = reg_rd(GPIOA); val &= 0x0FFFFFFF; val |= 0xB0000000; /* output, 50MHz, AF, push-pull */ reg_wr(GPIOA, val); /* Configure MISO pin (PA6) */ val = reg_rd(GPIOA); val &= 0xF0FFFFFF; val |= 0x04000000; /* input, floating */ reg_wr(GPIOA, val); }
static void spi2_ios(void) { u32 val; reg_set(RCC_APB2ENR, 0x08); /* Activate PortB */ /* Configure NSS pin (PB12) */ val = reg_rd(GPIOB + 0x04); val &= 0xFFF0FFFF; val |= 0x00030000; /* output, 50MHz, push-pull */ reg_wr(GPIOB+0x04, val); reg_wr(GPIO_BSRR(GPIOB), (0x01 << 12)); /* Disable SS (nss=1) */ /* Configure SCK pin (PB13) */ val = reg_rd(GPIOB + 0x04); val &= 0xFF0FFFFF; val |= 0x00B00000; /* output, 50MHz, AF, push-pull */ reg_wr(GPIOB+0x04, val); /* Configure MOSI pin (PB15) */ val = reg_rd(GPIOB + 0x04); val &= 0x0FFFFFFF; val |= 0xB0000000; /* output, 50MHz, AF, push-pull */ reg_wr(GPIOB+0x04, val); /* Configure MISO pin (PB14) */ val = reg_rd(GPIOB + 0x04); val &= 0xF0FFFFFF; val |= 0x04000000; /* input, floating */ reg_wr(GPIOB + 0x04, val); }
Inline void set_port_pull(uint32_t reg, uint_t p, bool_t up) { if (up) { sil_wrw_mem((void*)GPIO_BSRR(reg), 0x01 << p); } else { sil_wrw_mem((void*)GPIO_BRR(reg), 0x01 << p); } }
void setPin(u32 bank, u8 pin) { u32 pinMask = 0x1 << (pin); #if defined(ARCH_SI32) SET_REG(GPIO_SET(bank), pinMask); #elif defined(ARCH_STM32) SET_REG(GPIO_BSRR(bank), pinMask); #endif // defined(ARCH_SI32) }
UInt8 native_setLed(_UNUSED_ struct UjThread* t, _UNUSED_ struct UjClass* cls) { Boolean led = ujThreadPop(t); if (led) { GPIO_BSRR(GPIOB) = GPIO10; } else { GPIO_BRR(GPIOB) = GPIO10; } return UJ_ERR_NONE; }
void do_blink(void) { uint8_t i = 0; for (i = 0; i < 3; i++) { do_delay(); GPIO_BSRR(GPIOB) = GPIO10; do_delay(); GPIO_BRR(GPIOB) = GPIO10; } do_delay(); do_delay(); do_delay(); do_delay(); for (i = 0; i < 10; i++) { do_delay(); GPIO_BSRR(GPIOB) = GPIO10; do_delay(); GPIO_BRR(GPIOB) = GPIO10; } }
void spi1_cs(int en) { vu32 *nss; nss = (vu32 *)GPIO_BSRR(GPIOA); /* GPIOA_BSRR */ if (en) *nss = 0x00100000; // NSS = 0 else { spi1_wait(); *nss = 0x00000010; // NSS = 1 spi1_flush(); } }
void spi2_cs(int en) { vu32 *nss; nss = (vu32 *)GPIO_BSRR(GPIOB); if (en) *nss = 0x10000000; // NSS = 0 else { spi2_wait(); *nss = 0x00001000; // NSS = 1 spi2_flush(); } }
int main(void) { //rcc_clock_setup_in_hsi_out_48mhz(); rcc_clock_setup_in_hse_8mhz_out_72mhz(); rcc_periph_clock_enable(RCC_GPIOB); gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO10); do_blink(); GPIO_BRR(GPIOB) = GPIO10; struct UjClass* mainClass = NULL; struct UjClass* objectClass; UInt32 threadH; UInt8 ret = ujInit(&objectClass); if(ret != UJ_ERR_NONE){ GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } ret = ujRegisterNativeClass(&nativeCls_UC, objectClass, NULL); if(ret != UJ_ERR_NONE){ GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } ret = ujLoadClass(0, &mainClass); if(ret != UJ_ERR_NONE){ GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } ret = ujInitAllClasses(); if(ret != UJ_ERR_NONE){ GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } //now classes are loaded, time to call the entry point threadH = ujThreadCreate(0); if(!threadH) { GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } UInt8 h = ujThreadGoto(threadH, mainClass, "main", "()V"); if(h == UJ_ERR_METHOD_NONEXISTENT) { GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } while(ujCanRun()) { h = ujInstr(); if(h != UJ_ERR_NONE) { GPIO_BSRR(GPIOB) = GPIO10; while (true) {} } } GPIO_BSRR(GPIOB) = GPIO10; while (true) {} }
void led_on(void) { GPIO_BSRR(GPIOB) = GPIO10; }
/** @brief Set a Group of Pins Atomic Set one or more pins of the given GPIO port to 1 in an atomic operation. @param[in] gpioport Unsigned int32. Port identifier @ref gpio_port_id @param[in] gpios Unsigned int16. Pin identifiers @ref gpio_pin_id If multiple pins are to be changed, use logical OR '|' to separate them. */ void gpio_set(u32 gpioport, u16 gpios) { GPIO_BSRR(gpioport) = gpios; }
void gpio_clear(u32 gpioport, u16 gpios) { GPIO_BSRR(gpioport) = gpios << 16; }
void resetPin(u32 bank, u8 pin) { u32 pinMask = 0x1 << (16+pin); SET_REG(GPIO_BSRR(bank),pinMask); }
void gpio_clear(uint32_t gpioport, uint16_t gpios) { GPIO_BSRR(gpioport) = gpios << 16; }
void gpio_set(uint32_t gpioport, uint16_t gpios) { GPIO_BSRR(gpioport) = gpios; }