Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <libopencm3/stm32/rcc.h>
- #include <libopencm3/stm32/gpio.h>
- #include <libopencm3/stm32/usart.h>
- #include <libopencm3/cm3/nvic.h>
- int _write(int fd, char *str, int len);
- static void setup(void)
- {
- rcc_periph_clock_enable(RCC_USART2);
- rcc_periph_clock_enable(RCC_GPIOA);
- rcc_periph_clock_enable(RCC_GPIOD);
- nvic_enable_irq(NVIC_USART2_IRQ);
- gpio_mode_setup(GPIOA, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO2 | GPIO3);
- gpio_mode_setup(GPIOD, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO12 | GPIO13);
- gpio_set_output_options(GPIOA, GPIO_OTYPE_OD, GPIO_OSPEED_25MHZ, GPIO3);
- gpio_set_af(GPIOA, GPIO_AF7, GPIO2);
- gpio_set_af(GPIOA, GPIO_AF7, GPIO3);
- usart_set_baudrate(USART2, 115200);
- usart_set_databits(USART2, 8);
- usart_set_parity(USART2, USART_PARITY_NONE);
- usart_set_stopbits(USART2, USART_STOPBITS_1);
- usart_set_flow_control(USART2, USART_FLOWCONTROL_NONE);
- usart_set_mode(USART2, USART_MODE_TX_RX);
- usart_enable_rx_interrupt(USART2);
- usart_enable(USART2);
- _write(1, "Ready, waiting for interrupts.", 30);
- }
- static void wait(int us)
- {
- int i;
- for(i=0; i<us; i++){
- __asm__("nop");
- }
- }
- //syscall
- int _write(int fd, char *str, int len)
- {
- int i;
- for(i = 0; i < len; i++)
- {
- if(str[i] == '\n')
- usart_send_blocking(USART2, '\r');
- usart_send_blocking(USART2, str[i]);
- }
- return i;
- }
- static void loop()
- {
- _write(1, "I am busy waiting...\n", 22);
- wait(1000000);
- __asm__("nop");
- }
- int main(void)
- {
- setup();
- while (1) {
- loop();
- }
- return 0;
- }
- #define USART_RXRDY(u) \
- (((USART_CR1(u) & USART_CR1_RXNEIE) != 0) && \
- ((USART_SR(u) & USART_SR_RXNE) != 0))
- void usart2_isr(void)
- {
- if(USART_RXRDY(USART2))
- {
- gpio_set(GPIOD, GPIO12);
- char data = 'a';
- data = usart_recv(USART2);
- if(data == 0x10) //CR
- data = 0x13; //LF
- _write(1,"IRQ: Recv: ", 11);
- _write(1, &data, 1);
- _write(1, "\n", 1);
- wait(10000);
- gpio_clear(GPIOD, GPIO12);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement