uartirda.h
来自「OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI」· C头文件 代码 · 共 1,302 行 · 第 1/4 页
H
1,302 行
/*
===============================================================================
TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION
Property of Texas Instruments
For Unrestricted Internal Use Only
Unauthorized reproduction and/or distribution is strictly prohibited.
This product is protected under copyright law and trade secret law
as an unpublished work.
Created 1999, (C) Copyright 1999 Texas Instruments. All rights reserved.
Filename : uartirda_a9.h
Description : Header file for the UART IrDA connected to ARM9
Project : Perseus
Author : Sebastien Sabatier
===============================================================================
*/
#ifndef _UARTIRDA__HH
#define _UARTIRDA__HH
#include "result.h"
#include "global_types.h"
#include "mapping.h"
#define UARTIRDA_ADDR1 UART_MODEM_IRDA_BASE_ADDR_ARM
//======================================================================
// Offset address of UARTIRDA's registers is mutiply by one
//======================================================================
#define UARTIRDA_DLL_OFFSET ALIGNOrNotOn32Bits_from8bits(0x00) // Divisor Latch Low
#define UARTIRDA_RHR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x00) // Receive Buffer Register (R)
#define UARTIRDA_THR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x00) // Transmit Holding Register (W)
#define UARTIRDA_IER_OFFSET ALIGNOrNotOn32Bits_from8bits(0x01) // Interrupt Enable Register
#define UARTIRDA_DLH_OFFSET ALIGNOrNotOn32Bits_from8bits(0x01) // Divisor Latch High
#define UARTIRDA_FCR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x02) // FIFO Control Register (W)
#define UARTIRDA_IIR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x02) // Interrupt identification Register (R)
#define UARTIRDA_EFR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x02) // Enhanced Feature Register
#define UARTIRDA_LCR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x03) // Line Control Register
#define UARTIRDA_MCR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x04) // Modem Control Register
#define UARTIRDA_ADR1_OFFSET ALIGNOrNotOn32Bits_from8bits(0x04) // ADR1 Register
#define UARTIRDA_XON1_OFFSET ALIGNOrNotOn32Bits_from8bits(0x04)
#define UARTIRDA_LSR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x05) // Line Status Register
#define UARTIRDA_ADR2_OFFSET ALIGNOrNotOn32Bits_from8bits(0x05) // ADR2 Register
#define UARTIRDA_XON2_OFFSET ALIGNOrNotOn32Bits_from8bits(0x05)
#define UARTIRDA_MSR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x06) // Modem Status Register
#define UARTIRDA_TCR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x06) // Trasmission control register
#define UARTIRDA_XOFF1_OFFSET ALIGNOrNotOn32Bits_from8bits(0x06)
#define UARTIRDA_XOFF2_OFFSET ALIGNOrNotOn32Bits_from8bits(0x07)
#define UARTIRDA_SPR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x07) // Trasmission control register
#define UARTIRDA_TLR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x07) // Trigger level register
#define UARTIRDA_MDR1_OFFSET ALIGNOrNotOn32Bits_from8bits(0x08) // Mode Definition Register
#define UARTIRDA_MDR2_OFFSET ALIGNOrNotOn32Bits_from8bits(0x09) // Mode Definition Register
#define UARTIRDA_SFLSR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0A) // Status FIFO Line Status register
#define UARTIRDA_TXFLL_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0A) // Transmit Frame Lenght Regiser low
#define UARTIRDA_TXFLH_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0B) // Transmit Frame Lenght Register Hight (W)
#define UARTIRDA_RESUME_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0B) //Resume register
#define UARTIRDA_RXFLL_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0C) // Receive Frame Lenght Regiser low
#define UARTIRDA_SFREGL_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0C) // Status FIFO Regiser Hight (R)
#define UARTIRDA_RXFLH_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0D) // Receive Frame Lenght Regiser Hight
#define UARTIRDA_SFREGH_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0D) // Status FIFO Regiser Hight (R)
#define UARTIRDA_DIV16_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0F) // Div1.6 Register
#define UARTIRDA_ACREG_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0F) // Auxiliary Control Register
#define UARTIRDA_BLR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0E) // BOF Length Register
#define UARTIRDA_UASR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x0E) // BOF Length Register
#define UARTIRDA_SCR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x10) //Supplemetary Control register
#define UARTIRDA_SSR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x11) //Supplemetary Status register
#define UARTIRDA_EBLR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x12) // new BOF Length Enhance Register
#define UARTIRDA_OSC_OFFSET ALIGNOrNotOn32Bits_from8bits(0x13)
#define UARTIRDA_MVR_OFFSET ALIGNOrNotOn32Bits_from8bits(0x14)
#define UARTIRDA_SYSC_OFFSET ALIGNOrNotOn32Bits_from8bits(0x15)
#define UARTIRDA_SYSS_OFFSET ALIGNOrNotOn32Bits_from8bits(0x16)
#define UARTIRDA_WER_OFFSET ALIGNOrNotOn32Bits_from8bits(0x17)
//====================================================================================================
// Address of UARTIRDA's registers
//====================================================================================================
// UART Interface Register
//FOR SAMSON ONLY #define UARTIRDA_UIR_REG *(REGISTER_UWORD8*) (MAP_UART_UIR_REG+UARTIRDA_UIR_OFFSET)
// Divisor Latch Low
#define UARTIRDA_DLL_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_DLL_OFFSET)
// Receive Buffer Register (R)
#define UARTIRDA_RHR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_RHR_OFFSET)
// Transmit Holding Register (W)
#define UARTIRDA_THR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_THR_OFFSET)
// Interrupt Enable Register
#define UARTIRDA_IER_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_IER_OFFSET)
#define UARTIRDA_DLH_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_DLH_OFFSET) // Divisor Latch High
#define UARTIRDA_FCR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_FCR_OFFSET) // FIFO Control Register (W)
#define UARTIRDA_IIR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+ UARTIRDA_IIR_OFFSET) // Interrupt identification Register (R)
#define UARTIRDA_EFR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_EFR_OFFSET) // Enhanced Feature Register
#define UARTIRDA_LCR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_LCR_OFFSET) // Line Control Register
#define UARTIRDA_MCR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_MCR_OFFSET) // Modem Control Register
#define UARTIRDA_ADR1_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_ADR1_OFFSET) // Xon1/ADR1 Register
#define UARTIRDA_XON1_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_XON1_OFFSET)
#define UARTIRDA_LSR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_LSR_OFFSET) // Line Status Register
#define UARTIRDA_ADR2_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_ADR2_OFFSET)
#define UARTIRDA_XON2_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_XON2_OFFSET)
#define UARTIRDA_MSR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_MSR_OFFSET) // Modem Status Register
#define UARTIRDA_TCR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_TCR_OFFSET) // Trasmission control register
#define UARTIRDA_XOFF1_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_XOFF1_OFFSET)
#define UARTIRDA_TLR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_TLR_OFFSET) // Trigger level register
#define UARTIRDA_XOFF2_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_XOFF2_OFFSET)
#define UARTIRDA_MDR1_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_MDR1_OFFSET) // Mode Definition Register
#define UARTIRDA_MDR2_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_MDR2_OFFSET) // Mode Definition Register
#define UARTIRDA_SFLSR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+ UARTIRDA_SFLSR_OFFSET) // Status FIFO Line Status register
#define UARTIRDA_TXFLL_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_TXFLL_OFFSET) // Transmit Frame Lenght Regiser low
#define UARTIRDA_RESUME_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_RESUME_OFFSET)
#define UARTIRDA_TXFLH_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_TXFLH_OFFSET) // Transmit Frame Lenght Regiser Hight
#define UARTIRDA_SFREGL_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_SFREGL_OFFSET) // Status FIFO Regiser Hight (R)
#define UARTIRDA_RXFLL_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_RXFLL_OFFSET) // Receive Frame Lenght Regiser low
#define UARTIRDA_SFREGH_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_SFREGH_OFFSET) // Status FIFO Regiser Hight (R)
#define UARTIRDA_RXFLH_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_RXFLH_OFFSET) // Receive Frame Lenght Regiser Hight
#define UARTIRDA_DIV16_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_DIV16_OFFSET) // Div1.6 Register
#define UARTIRDA_ACREG_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_ACREG_OFFSET) // Auxiliary Control Register
#define UARTIRDA_SCR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_SCR_OFFSET) //Supplemetary Control register
#define UARTIRDA_SSR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_SSR_OFFSET) //Supplemetary Status register
#define UARTIRDA_BLR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_BLR_OFFSET) // BOF Length Register
#define UARTIRDA_UASR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_UASR_OFFSET)
#define UARTIRDA_EBLR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_EBLR_OFFSET) // new BOF Length Register
//6.5 div factor register
#define UARTIRDA_OSC_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_OSC_OFFSET) //6.5 division factor register
#define UARTIRDA_MVR_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_MVR_OFFSET)
#define UARTIRDA_SYSC_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_SYSC_OFFSET)
#define UARTIRDA_SYSS_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_SYSS_OFFSET)
#define UARTIRDA_WER_REG *(REGISTER_UWORD8*) (UARTIRDA_ADDR1+UARTIRDA_WER_OFFSET)
// ---- end UARTIRDA configuration adresse register ----
/*
typedef enum {
THR_W = 0,IER_W,DLL_W,DLH_W,FCR_W,EFR_W,LCR_W,MCR_W,XON1_W,ADDR1_W,XON2_W,ADDR2_W,TCR_W
,XOFF1_W,XOFF2_W,SPR_W,TLR_W,MDR1_W,MDR2_W,TXFLL_W,TXFLH_W,RXFLL_W,RXFLH_W,BLR_W
,ACREG_W,SCR_W,EBLR_W,SYSC_W,SYSS_W,WER_W
} register_write_name ;
typedef enum {
RHR_R = 0,IER_R,DLL_R,DLH_R,IIR_R,EFR_R,LCR_R,MCR_R,XON1_R,ADDR1_R,XON2_R,ADDR2_R,LSR_R
,MSR_R,TCR_R,XOFF1_R,XOFF2_R,SPR_R,TLR_R,MDR1_R,MDR2_R,SFLSR_R,RESUME_R,SFREGL_R,SFREGH_R
,BLR_R,UASR_R,ACREG_R,SCR_R,SSR_R,EBLR_R,MVR_R,SYSC_R,SYSS_R,WER_R
} register_read_name ;
UWORD8 Write_category[27] = {
//THR_W = 0,IER_W,DLL_W,DLH_W,FCR_W,EFR_W,LCR_W,MCR_W,XON1_W,ADDR1_W,XON2_W,ADDR2_W,TCR_W
1 , 6 , 2 , 2 , 5 , 3 , 1 , 5 , 3 , 3 , 3 , 3 , 4
//,XOFF1_W,XOFF2_W,SPR_W,TLR_W,MDR1_W,MDR2_W,TXFLL_W,TXFLH_W,RXFLL_W,RXFLH_W,BLR_W
, 3 , 3 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1 , 1
//,ACREG_W,SCR_W,EBLR_W,SYSC_W,SYSS_W,WER_W
, 1 , 1 , 1 , 1 , 1 , 1
}
UWORD8 Write_category[34] = {
//RHR_R = 0,IER_R,DLL_R,DLH_R,IIR_R,EFR_R,LCR_R,MCR_R,XON1_R,ADDR1_R,XON2_R,ADDR2_R,LSR_R
1 , 6 , 2 , 2 , 1 , 3 , 1 , 5 , 3 , 3 , 3 , 3 , 1
, 1, 4 , 3 ,3
//,MSR_R,TCR_R,XOFF1_R,XOFF2_R,SPR_R,TLR_R,MDR1_R,MDR2_R,SFLSR_R,RESUME_R,SFREGL_R,SFREGH_R
, 1 , 4 , 3 , 3 , 1 , 4 , 1 , 1 , 1 , 1 , 1 , 1
//,BLR_R,UASR_R,ACREG_R,SCR_R,SSR_R,EBLR_R,MVR_R,SYSC_R,SYSS_R,WER_R
, 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1
}
*/
#define SET_LCR7_TO_0 UARTIRDA_LCR_REG &= 0x7F ;
#define SET_LCR7_TO_1 UARTIRDA_LCR_REG |= 0x80 ;
#define UNSET_LCR_0xBF UARTIRDA_LCR_REG &= 0xFC ;
#define SET_LCR_0xBF UARTIRDA_LCR_REG = 0xBF ;
#define SET_EFR_4 UARTIRDA_EFR_REG |= 0x10 ;
#define SET_MCR_6 UARTIRDA_MCR_REG |= 0x40 ;
typedef enum
{
UARTIRDA_FCR_REG_RESET_ERROR = 50,
UARTIRDA_SCR_REG_RESET_ERROR = 51,
UARTIRDA_LCR_REG_RESET_ERROR = 52,
UARTIRDA_LSR_REG_RESET_ERROR = 53,
UARTIRDA_SSR_REG_RESET_ERROR = 54,
UARTIRDA_MCR_REG_RESET_ERROR = 55,
UARTIRDA_MSR_REG_RESET_ERROR = 56,
UARTIRDA_IER_REG_RESET_ERROR = 57,
UARTIRDA_IIR_REG_RESET_ERROR = 58,
UARTIRDA_EFR_REG_RESET_ERROR = 59,
//XON1/ADDR1, XON2/ADDR2, XOFF1, XOFF2, SPR, DLL, DLH UNDEFINED on reset
UARTIRDA_TCR_REG_RESET_ERROR = 60,
UARTIRDA_TLR_REG_RESET_ERROR = 61,
UARTIRDA_MDR1_REG_RESET_ERROR = 62,
UARTIRDA_MDR2_REG_RESET_ERROR = 63,
UARTIRDA_TXFLL_REG_RESET_ERROR = 64,
UARTIRDA_TXFLH_REG_RESET_ERROR = 65,
UARTIRDA_RXFLL_REG_RESET_ERROR = 66,
UARTIRDA_RXFLH_REG_RESET_ERROR = 67,
//SFLSR and SFREGL are undefined on reset
UARTIRDA_RESUME_REG_RESET_ERROR = 68,
UARTIRDA_BLR_REG_RESET_ERROR = 69,
UARTIRDA_DIV16_REG_RESET_ERROR = 70,
UARTIRDA_ACREG_RESET_ERROR = 71,
UARTIRDA_DLL_INIT_ERROR = 72,
UARTIRDA_DLH_INIT_ERROR = 73
//FOR SAMSON ONLY UARTIRDA_UIR_REG_RESET_ERROR = 74
} UARTIRDA_Error_t;
//------------------------------------------
// UIRD_SetBfToLcr
//------------------------------------------
UWORD8 UIRD_SetBfToLcr(void);
//--------------------------------------------------------------------
// UIRD_ClearLcr7
//--------------------------------------------------------------------
UWORD8 UIRD_ClearLcr7(void);
//--------------------------------------------------------------------
// UIRD_SetEfr4
//--------------------------------------------------------------------
UWORD8 UIRD_SetEfr4(void);
//--------------------------------------------------------------------
// UIRD_RestoreEfr
//--------------------------------------------------------------------
void UIRD_RestoreEfr(const UWORD8 value);
//--------------------------------------------------------------------
// UIRD_SetMcr6
//--------------------------------------------------------------------
UWORD8 UIRD_SetMcr6(void);
//--------------------------------------------------
// UIRD_RestoreMcr
//--------------------------------------------------
void UIRD_RestoreMcr(const UWORD8 mcr);
//--------------------------------------------------------------------------------------
//NAME : UIRD_InitIer
//DESCRIPTION : Setup the Modem Interrupt Enable Register
//PARAMETERS the values are either 0=>Disable , 1=>Enable
// RxINT : RHR Interrupt
// TxINT : THR Interrupt
// RxStINT : Line Status Interrupt
// ModemINT: Modem Status Register Interrupt
// Sleep : Sleep mode
// Xoff : XOFF Interrupt
// RTSINT : Output Request To Send Interrupt
// CTSINT : Input Clear To Send Interrupt
//RETURN VALUE: None
//--------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?