📄 mcbsp54.h
字号:
__INLINE void mcbsp_init(unsigned short port_no,
unsigned int spcr1_ctrl, unsigned int spcr2_ctrl,
unsigned int rcr1_ctrl, unsigned int rcr2_ctrl,
unsigned int xcr1_ctrl, unsigned int xcr2_ctrl,
unsigned int srgr1_ctrl, unsigned int srgr2_ctrl,
unsigned int mcr1_ctrl, unsigned int mcr2_ctrl,
unsigned int rcera_ctrl, unsigned int rcerb_ctrl,
unsigned int xcera_ctrl, unsigned int xcerb_ctrl,
unsigned int pcr_ctrl);
#ifdef _INLINE
/******************************************************************/
/* mcbsp_init - initialize and start serial port operation */
/* */
/******************************************************************/
static inline void mcbsp_init(unsigned short port_no,
unsigned int spcr1_ctrl, unsigned int spcr2_ctrl,
unsigned int rcr1_ctrl, unsigned int rcr2_ctrl,
unsigned int xcr1_ctrl, unsigned int xcr2_ctrl,
unsigned int srgr1_ctrl, unsigned int srgr2_ctrl,
unsigned int mcr1_ctrl, unsigned int mcr2_ctrl,
unsigned int rcera_ctrl, unsigned int rcerb_ctrl,
unsigned int xcera_ctrl, unsigned int xcerb_ctrl,
unsigned int pcr_ctrl)
{
/****************************************************************/
/* Place port in reset - setting XRST & RRST to 0 */
/****************************************************************/
MCBSP_SUBREG_BITWRITE(port_no, SPCR1_SUBADDR, RRST, RRST_SZ, 0);
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, XRST, XRST_SZ, 0);
/****************************************************************/
/* Set values of all control registers */
/****************************************************************/
MCBSP_SUBREG_WRITE(port_no, RCR1_SUBADDR, rcr1_ctrl);
MCBSP_SUBREG_WRITE(port_no, RCR2_SUBADDR, rcr2_ctrl);
MCBSP_SUBREG_WRITE(port_no, XCR1_SUBADDR, xcr1_ctrl);
MCBSP_SUBREG_WRITE(port_no, XCR2_SUBADDR, xcr2_ctrl);
MCBSP_SUBREG_WRITE(port_no, SRGR1_SUBADDR, srgr1_ctrl);
MCBSP_SUBREG_WRITE(port_no, SRGR2_SUBADDR, srgr2_ctrl);
MCBSP_SUBREG_WRITE(port_no, MCR1_SUBADDR, mcr1_ctrl);
MCBSP_SUBREG_WRITE(port_no, MCR2_SUBADDR, mcr2_ctrl);
MCBSP_SUBREG_WRITE(port_no, RCERA_SUBADDR, rcera_ctrl);
MCBSP_SUBREG_WRITE(port_no, RCERB_SUBADDR, rcerb_ctrl);
MCBSP_SUBREG_WRITE(port_no, XCERA_SUBADDR, xcera_ctrl);
MCBSP_SUBREG_WRITE(port_no, XCERB_SUBADDR, xcerb_ctrl);
MCBSP_SUBREG_WRITE(port_no, PCR_SUBADDR, pcr_ctrl);
MCBSP_SUBREG_BITWRITE(port_no, SPCR1_SUBADDR, RRST, RRST_SZ, 1);
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, XRST, XRST_SZ, 1);
}
#endif
/********* Macro Definitions **************************************/
/******************************************************************/
/* MCBSP_BYTES_PER_WORD - return # of bytes required to hold # */
/* of bits indicated by wdlen */
/******************************************************************/
#define MCBSP_BYTES_PER_WORD(wdlen) \
((int)((wdlen) + 1) / 2)
/******************************************************************/
/* MCBSP_ENABLE(unsigned short port_no, unsigned short type) - */
/* starts serial port receive and/or transmit */
/* type= 1 rx, type= 2 tx, type= 3 both */
/******************************************************************/
#define MCBSP_ENABLE(port_no,mode) \
REG_WRITE(SPCR1_ADDR(port_no), \
(MCBSP_SUBREG_READ(port_no, SPCR1_SUBADDR) | (mode & 1))); \
REG_WRITE(SPCR2_ADDR(port_no), \
(MCBSP_SUBREG_READ(port_no, SPCR2_SUBADDR) | ((mode >> 1) & 1)))
/******************************************************************/
/* MCBSP_TX_RESET() - reset transmit side of serial port */
/* */
/******************************************************************/
#define MCBSP_TX_RESET(port_no)\
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, XRST, XRST_SZ, 0);
/******************************************************************/
/* MCBSP_RX_RESET() - reset receive side of serial port */
/* */
/******************************************************************/
#define MCBSP_RX_RESET(port_no)\
MCBSP_SUBREG_BITWRITE(port_no, SPCR1_SUBADDR, RRST, RRST_SZ, 0);
/******************************************************************/
/* MCBSP_DRR1_READ() - read data value from serial port */
/******************************************************************/
/* use instead: MCBSP_SUBREG_READ(... , DRR1_SUBADDR, ... )*/
/******************************************************************/
/* MCBSP_DRR2_READ() - read data value from serial port */
/******************************************************************/
/* use instead: MCBSP_SUBREG_READ(... , DRR2_SUBADDR, ... )*/
/******************************************************************/
/* MCBSP_DRR12_READ() - read data value from serial port */
/* return value as unsigned long */
/******************************************************************/
#define MCBSP_DRR12_READ(port_no)\
(((*(volatile unsigned long* DRR2_ADDR(port_no)))<<16) &\
(REG_READ(DRR1_ADDR(port_no)))
/******************************************************************/
/* MCBSP_DXR12_WRITE() - write data value to serial port */
/******************************************************************/
#define MCBSP_DXR12_WRITE(port_no, value)\
(REG_WRITE(DXR2_ADDR(port_no), (unsigned int) (value >> 16)),\
(REG_WRITE(DXR1_ADDR(port_no), (unsigned int) value)) )
/******************************************************************/
/* MCBSP_IO_ENABLE() - place port in general purpose I/O mode */
/******************************************************************/
#define MCBSP_IO_ENABLE(port_no) \
{ MCBSP_TX_RESET(port_no); MCBSP_RX_RESET(port_no); \
MCBSP_SUBREG_BITWRITE(port_no, PCR_SUBADDR, RIOEN, 2, 0x0003) }
/******************************************************************/
/* MCBSP_IO_DISABLE() - take port out of general purpose I/O mode */
/******************************************************************/
#define MCBSP_IO_DISABLE(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, PCR_SUBADDR, RIOEN, 2, 0x0000)
/******************************************************************/
/* MCBSP_FRAME_SYNC_ENABLE - sets FRST bit in SPCR */
/******************************************************************/
#define MCBSP_FRAME_SYNC_ENABLE(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, FRST, FRST_SZ, 0x0001)
/******************************************************************/
/* MCBSP_FRAME_SYNC_RESET - clrs FRST bit in SPCR */
/******************************************************************/
#define MCBSP_FRAME_SYNC_RESET(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, FRST, FRST_SZ, 0x0000)
/******************************************************************/
/* MCBSP_SAMPLE_RATE_ENABLE - sets GRST bit in SPCR */
/******************************************************************/
#define MCBSP_SAMPLE_RATE_ENABLE(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, GRST, GRST_SZ, 0x0001)
/******************************************************************/
/* MCBSP_SAMPLE_RATE_RESET - clrs GRST bit in SPCR */
/******************************************************************/
#define MCBSP_SAMPLE_RATE_RESET(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, SPCR2_SUBADDR, GRST, GRST_SZ, 0x0000)
/******************************************************************/
/* MCBSP_RRDY - returns selected ports RRDY */
/******************************************************************/
#define MCBSP_RRDY(port_no) \
MCBSP_SUBREG_BITREAD(port_no, SPCR1_SUBADDR, RRDY, RRDY_SZ)
/******************************************************************/
/* MCBSP_XRDY - returns selected ports XRDY */
/******************************************************************/
#define MCBSP_XRDY(port_no) \
MCBSP_SUBREG_BITREAD(port_no, SPCR2_SUBADDR, XRDY, XRDY_SZ)
/******************************************************************/
/* MCBSP_LOOPBACK_ENABLE - places selected port in loopback */
/******************************************************************/
#define MCBSP_LOOPBACK_ENABLE(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, SPCR1_SUBADDR, DLB, DLB_SZ, 0x0001)
/******************************************************************/
/* MCBSP_LOOPBACK_DISABLE - takes port out of DLB */
/******************************************************************/
#define MCBSP_LOOPBACK_DISABLE(port_no) \
MCBSP_SUBREG_BITWRITE(port_no, SPCR1_SUBADDR, DLB, DLB_SZ, 0x0000)
#ifdef __INLINE
#undef __INLINE
#endif
#endif /*_MCBSP_H_*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -