/**************************************************************************//** \brief Startup initialization. ******************************************************************************/ void hwInitUsbFifo(void) { // init decoder input pins GPIO_PD6_make_out(); GPIO_PD7_make_out(); // set pins to zero to select usb FIFO GPIO_PD6_clr(); GPIO_PD7_clr(); // setup default value GPIO_RD_set(); GPIO_WR_set(); // init R\W pins GPIO_RD_make_out(); GPIO_WR_make_out(); // init message pins GPIO_TXE_make_in(); GPIO_RXF_make_in(); USB_DATA_DDR = 0; //to avoid IAR warnings (void)GPIO_PD6_set; (void)GPIO_PD6_read; (void)GPIO_PD7_set; (void)GPIO_PD7_read; (void)GPIO_RD_read; (void)GPIO_WR_read; (void)GPIO_TXE_set; (void)GPIO_TXE_clr; (void)GPIO_TXE_make_out; (void)GPIO_RXF_set; (void)GPIO_RXF_clr; (void)GPIO_RXF_make_out; }
/**************************************************************************//** \brief Receive byte from usb FIFO. \param[out] p - pointer to byte memory; \return true - there is received byte; \n false - there is not received byte; ******************************************************************************/ bool getByteUsbFifo(uint8_t *p) { if (!GPIO_RXF_read()) { GPIO_RD_clr(); NOP; *p = USB_DATA_PIN; GPIO_RD_set(); return true; } return false; }
/**************************************************************************//** \brief Puts the byte received to the cyclic buffer. ******************************************************************************/ static void usbfifoRxBufferFiller(void) { uint16_t old; uint16_t poW; uint16_t poR; uint8_t *buffer; HalUsartService_t *control; if (!usbfifoPointDescrip) { // unregistered intrrupt is occurred HAL_DisableIrq(IRQ_7); return; } control = &usbfifoPointDescrip->service; poW = control->rxPointOfWrite; poR = control->rxPointOfRead; buffer = usbfifoPointDescrip->rxBuffer; if (!buffer) { HAL_DisableIrq(IRQ_7); return; } old = poW; if (++poW == usbfifoPointDescrip->rxBufferLength) poW = 0; if (poW == poR) { // Buffer full. HAL_DisableIrq(IRQ_7); return; } // Buffer full. control->rxPointOfWrite = poW; GPIO_RD_clr(); NOP; buffer[old] = USB_DATA_PIN; GPIO_RD_set(); control->rxBytesInBuffer++; usbfifoPostTask(USB_FIFO_TASK_RX); }
/**************************************************************************//** \brief Startup initialization. ******************************************************************************/ void hwInitUsbFifo(void) { // init decoder input pins GPIO_PD6_make_out(); GPIO_PD7_make_out(); // set pins to zero to select usb FIFO GPIO_PD6_clr(); GPIO_PD7_clr(); // setup default value GPIO_RD_set(); GPIO_WR_set(); // init R\W pins GPIO_RD_make_out(); GPIO_WR_make_out(); // init message pins GPIO_TXE_make_in(); GPIO_RXF_make_in(); USB_DATA_DDR = 0; }
/**************************************************************************//** \brief Startup initialization. ******************************************************************************/ void usbfifoInit(void) { // init decoder input pins GPIO_PC6_make_out(); GPIO_PC7_make_out(); // set pins to zero to select usb FIFO GPIO_PC6_clr(); GPIO_PC7_clr(); // setup default value GPIO_RD_set(); GPIO_WR_set(); // init R\W pins GPIO_RD_make_out(); GPIO_WR_make_out(); // register RXF interrupt HAL_RegisterIrq(IRQ_7, IRQ_LOW_LEVEL, usbfifoRxBufferFiller); // register TXE interrupt HAL_RegisterIrq(IRQ_6, IRQ_LOW_LEVEL, usbfifoTxBufferCleaner); USB_DATA_DDR = 0; }