FreeCalypso > hg > fc-tourmaline
view src/gpf/tst/drv/usart.h @ 268:f2e52cab0a73
abb_inth.c: check all interrupt causes, not just one
The original code used if - else if - else if etc constructs, thus
the first detected interrupt was the only one handled. However,
Iota ITSTATREG is a clear-on-read register, thus if we only handle
the first detected interrupt and skip checking the others, then the
other interrupts will be lost, if more than one interrupt happened
to occur in one ABB interrupt handling cycle - a form of rare race
condition. Change the code to check all interrupts that were read
in this cycle.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 13 Jun 2021 18:17:53 +0000 |
parents | 4e78acac3d88 |
children |
line wrap: on
line source
/* +------------------------------------------------------------------------------ | File: usart.h +------------------------------------------------------------------------------ | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : This Modul defines functions for actual or simulated | USART comunication between two PS-Frames. | Use US_set_mode() to select actual USART under windows95 or | under windowsNT, or to select simulated USART under win95/NT +----------------------------------------------------------------------------- */ #ifndef USART_H #define USART_H /* * Device addresses */ #define USART_DC (USART_BASE + 0x00) /* Data Channel */ #define USART_CC (USART_BASE + 0x04) /* Control Channel */ #define USART_CLK (USART_BASE + 0x08) /* Clock */ #define USART_CTL (USART_BASE + 0x0C) /* FIFO control */ #define USART_FSTAT (USART_BASE + 0x10) /* FIFO status */ #define USART_FTHR (USART_BASE + 0x14) /* FIFO threshold */ /* * USART_CLK bit definitions */ #define US_CLK_CLK_SEL 0x0001 #define US_CLK_TXC_SEL 0x0002 #define US_CLK_RXC_SEL 0x0004 #define US_CLK_TXC_CTL 0x0100 #define US_CLK_RXC_CTL 0x0200 #define US_CLK_RESET 0x0400 /* * USART_MODE bit definitions */ /* Sync/Async and Baud rate */ #define US_MODE_SYNC 0x00 #define US_MODE_ASYNC 0x01 #define US_MODE_ASYNC16 0x02 #define US_MODE_SYNC64 0x03 /* Character length */ #define US_MODE_CHAR5 (0x00 << 2) #define US_MODE_CHAR6 (0x01 << 2) #define US_MODE_CHAR7 (0x02 << 2) #define US_MODE_CHAR8 (0x03 << 2) /* Parity */ #define US_MODE_PEN 0x10 #define US_MODE_EP 0x20 /* Stop bits */ #define US_MODE_STOP1 (0x01 << 6) #define US_MODE_STOP15 (0x02 << 6) #define US_MODE_STOP2 (0x03 << 6) /* Baud rates */ #define US_BAUD_115200 0 #define US_BAUD_57600 1 #define US_BAUD_38400 2 #define US_BAUD_33900 3 #define US_BAUD_28800 4 #define US_BAUD_19200 5 #define US_BAUD_14400 6 #define US_BAUD_9600 7 #define US_BAUD_4800 8 #define US_BAUD_2400 9 #define US_BAUD_1200 10 #define US_BAUD_600 11 #define US_BAUD_300 12 #define US_BAUD_150 13 #define US_BAUD_75 14 #define US_BAUD_128000 15 #define US_BAUD_256000 16 /* * USART COMMAND bit definitions */ #define US_CMD_TXEN 0x01 #define US_CMD_DTR 0x02 #define US_CMD_RXE 0x04 #define US_CMD_SBRK 0x08 #define US_CMD_ER 0x10 #define US_CMD_RTS 0x20 #define US_CMD_IR 0x40 #define US_CMD_EH 0x80 /* * USART STATUS bit definitions */ #define US_STAT_TXRDY 0x01 #define US_STAT_RXRDY 0x02 #define US_STAT_TXEMPTY 0x04 #define US_STAT_PE 0x08 #define US_STAT_OE 0x10 #define US_STAT_FE 0x20 #define US_STAT_SBDET 0x40 #define US_STAT_DSR 0x80 /* * FIFO control */ #define US_CTL_RST_FIFO 0x0001 #define US_CTL_FIFOBYPASS 0x0002 #define US_CTL_AUTOFC 0x0004 #define US_CTL_MS_MSK 0x0008 #define US_CTL_RDRY_MSK 0x0100 #define US_CTL_TO_MSK 0x0200 #define US_CTL_TDRY_MSK 0x1000 #define US_CTL_TXE_MSK 0x2000 #define US_FSTAT_GFE 0x0001 #define US_FSTAT_GPE 0x0002 #define US_FSTAT_MODSTAT 0x0008 #define US_FSTAT_RXOE 0x0020 #define US_FSTAT_RXFULL 0x0040 #define US_FSTAT_RXEMPTY 0x0080 #define US_FSTAT_RDRY 0x0100 #define US_FSTAT_TIMEOUT 0x0200 #define US_FSTAT_TXFULL 0x0800 #define US_FSTAT_TDRY 0x1000 #define US_FSTAT_TXE 0x2000 #define US_FSTAT_TXEMPTY 0x4000 /* * mode constants */ #define US_MODE_95 1 #define US_MODE_NT 2 #define US_MODE_SIM 3 #define US_MODE_FILE 4 /* * Prototypes */ void US_set_mode(int mode); int US_get_mode(void); int US_Init(unsigned int baudRate, int fifoSize, char flow_ctrl, void (func(void)), const char* fname ); BOOL US_Close(void); BYTE US_ReadChar(void); void US_Handler(void); void US_WriteChar(int usart_id, char ch); void US_WriteNChars(int usart_id, BYTE *s, unsigned int n); int US_IsChar(void); void US_WriteString(int usart_id, char *s); void US_Handler(void); void US_SetFlowCtrl (char flowCtrl); /* int US_InitBlk(int baudRate, int fifoSize, NU_HISR *hP ); */ ULONG US_ReadNChars(int usart_id, BYTE *s, ULONG n); /* defines for name_change US -> UT */ #ifndef _TARGET_ #define UT_DEVICE_0 (0) #define UT_BAUD_256000 US_BAUD_256000 #define UT_BAUD_128000 US_BAUD_128000 #define UT_BAUD_115200 US_BAUD_115200 #define UT_BAUD_57600 US_BAUD_57600 #define UT_BAUD_38400 US_BAUD_38400 #define UT_BAUD_33900 US_BAUD_33900 #define UT_BAUD_28800 US_BAUD_28800 #define UT_BAUD_19200 US_BAUD_19200 #define UT_BAUD_14400 US_BAUD_14400 #define UT_BAUD_9600 US_BAUD_9600 #define UT_BAUD_4800 US_BAUD_4800 #define UT_BAUD_2400 US_BAUD_2400 #define UT_BAUD_1200 US_BAUD_1200 #define UT_BAUD_600 US_BAUD_600 #define UT_BAUD_300 US_BAUD_300 #define UT_BAUD_150 US_BAUD_150 #define UT_BAUD_75 US_BAUD_75 #define UT_MODE_95 US_MODE_95 #define UT_MODE_NT US_MODE_NT #define UT_MODE_SIM US_MODE_SIM #define UT_MODE_FILE US_MODE_FILE #define UT_set_mode US_set_mode #define UT_get_mode US_get_mode #define UT_Init US_Init #define UT_Close US_Close #define UT_ReadChar US_ReadChar #define UT_ReadNChars US_ReadNChars #define UT_Handler US_Handler #define UT_WriteChar US_WriteChar #define UT_WriteNChars US_WriteNChars #define UT_IsChar US_IsChar #define UT_WriteString US_WriteString #define UT_SetFlowCtrl US_SetFlowCtrl #endif #endif