Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
	}
}
Ejemplo n.º 4
0
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)
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
	}
}
Ejemplo n.º 7
0
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();
	}
}
Ejemplo n.º 8
0
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();
	}
}
Ejemplo n.º 9
0
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) {}
}
Ejemplo n.º 10
0
void led_on(void) {
	GPIO_BSRR(GPIOB) = GPIO10;
}
Ejemplo n.º 11
0
/** @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;
}
Ejemplo n.º 12
0
void gpio_clear(u32 gpioport, u16 gpios)
{
	GPIO_BSRR(gpioport) = gpios << 16;
}
Ejemplo n.º 13
0
void resetPin(u32 bank, u8 pin) {
  u32 pinMask = 0x1 << (16+pin);
  SET_REG(GPIO_BSRR(bank),pinMask);
}
Ejemplo n.º 14
0
void gpio_clear(uint32_t gpioport, uint16_t gpios)
{
	GPIO_BSRR(gpioport) = gpios << 16;
}
Ejemplo n.º 15
0
void gpio_set(uint32_t gpioport, uint16_t gpios)
{
	GPIO_BSRR(gpioport) = gpios;
}