usb-serial: functional f4

Add stubs based on f1, and include irq timing pin
This commit is contained in:
Karl Palsson 2016-09-30 23:30:29 +00:00
parent 315da21955
commit 34de89cb81
2 changed files with 48 additions and 2 deletions

View file

@ -37,6 +37,11 @@
do { } while (0)
#endif
static inline void gpio_really(uint32_t port, uint16_t pin, const bool set)
{
int shift = set ? 0 : 16;
GPIO_BSRR(port) = pin << shift;
}
extern struct ringb rx_ring, tx_ring;
static void usart_setup(void)
@ -69,6 +74,7 @@ static void usart_setup(void)
void usart2_isr(void)
{
gpio_really(GPIOA, GPIO5, 1);
// usbser-rxne()
/* Check if we were called because of RXNE. */
if (usart_get_interrupt_source(USART2, USART_SR_RXNE)) {
@ -107,6 +113,7 @@ void usart2_isr(void)
// gpio_clear(LED_TX_PORT, LED_TX_PIN);
// gpio_clear(RS485DE_PORT, RS485DE_PIN);
// }
gpio_really(GPIOA, GPIO5, 0);
}
void usb_cdcacm_setup_pre_arch(void)
@ -122,6 +129,43 @@ void usb_cdcacm_setup_pre_arch(void)
void usb_cdcacm_setup_post_arch(usbd_device *dev)
{
(void)dev;
}
void cdcacm_arch_pin(int port, enum cdcacm_pin pin, bool set)
{
(void)port; // TODO if you want to handle multiple ports
switch (pin) {
case CDCACM_PIN_LED_TX:
gpio_really(LED_TX_PORT, LED_TX_PIN, set);
break;
case CDCACM_PIN_LED_RX:
gpio_really(LED_RX_PORT, LED_RX_PIN, set);
break;
case CDCACM_PIN_RS485DE:
gpio_really(RS485DE_PORT, RS485DE_PIN, set);
break;
default:
break;
}
}
void cdcacm_arch_txirq(int port, bool set) {
(void)port; //FIXME if you make this multi port
if (set) {
usart_enable_tx_interrupt(USART2);
} else {
usart_disable_tx_interrupt(USART2);
}
}
void cdcacm_arch_set_line_state(int port, uint8_t dtr, uint8_t rts)
{
(void)port; // FIXME if you want multiple ports
(void) dtr;
(void) rts;
// LM4f has an implementation of this if you're keen
}
@ -136,7 +180,8 @@ int main(void)
gpio_mode_setup(RS485DE_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,
RS485DE_PIN);
rcc_periph_clock_enable(RCC_GPIOA);
gpio_mode_setup(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO5);
usart_setup();
usb_cdcacm_setup_pre_arch();

View file

@ -315,11 +315,12 @@ static void task_drain_rx(struct ringb *r) {
int zci = 0;
int c = ringb_get(r);
while (c >= 0) {
//trace_send8(STIMULUS_RING_DRAIN, c);
zero_copy_is_for_losers[zci++] = c;
c = ringb_get(r);
}
if (zci) {
trace_send16(STIMULUS_RING_DRAIN, zci);
//trace_send16(STIMULUS_RING_DRAIN, zci);
ER_DPRINTF("Drx %db\n", zci);
usbd_ep_write_packet(acm_dev, 0x82, zero_copy_is_for_losers, zci);
}