/*---------------------------------------------------------------------------
文 件 名 : C5402CFG.H(枚举感知版)
创 建 人 : DSP菜鸟 HotPower@126.com
创 建 日 期 : 2006.6.09 11:19
最近修改日期 : 2008.12.25 8:18
创 建 地 点 : 西安大雁塔村队部(http://www.hotpower.org/)
版 本 号 : V4.20
修 改 理 由 : 修正和增订内容
用枚举替代宏定义来得到智能感知的快捷.类似VC助手之类的工具软件
的感知功能.
由于CCS具备对枚举的智能感知,键入枚举名后即可选择。
雷同结构或结构指针的智能感知功能。
由于C/C++的枚举和Java的不太相同,不能作为数据类型赋值。故选择
枚举值后应该再删除枚举名及'.'即可。
虽然没Java枚举便捷,但可以减少查阅c5402cfg.h枚举值的次数
本版本只是借用枚举名来迅速地查阅需要的枚举值来提高效率和降低
错误。
备 注 : 由此文件出现的问题,DSP菜鸟不负任何责任
程序代码全部由C/C++语言编写.并支持全部的CCS的C++选项。
菜农将不断更新和完善本头文件。
应 用 举 例:
SREGs.DMA.DMSA = DMSFC0;//DMA通道0同步事件和帧寄存器
SREGs.DMA.DMSDI.DMSFC_Regs =
(DSYN_NONE << DMSFC_DSYN);//无DMA同步事件
键入"DMSFC"加"."后智能感知到DMSFC.DMSFC_DSYN。
键入"DMSFC_DSYN"加"."后智能感知到DMSFC_DSYN.DSYN_NONE。
得到:
SREGs.DMA.DMSDI.DMSFC_Regs = (DMSFC_DSYN.DSYN_NONE <<
DMSFC.DMSFC_DSYN);//无DMA同步事件
整理删除"DMSFC."和"DMSFC_DSYN."从而得到上式。
SREGs.DMA.DMSDI.DMSFC_Bits.DSYN = DSYN_NONE;//无DMA同步事件
键入"DMSFC_DSYN"加"."后智能感知到DMSFC_DSYN.DSYN_NONE。
得到:
SREGs.DMA.DMSDI.DMSFC_Bits.DSYN =
DMSFC_DSYN.DSYN_NONE;//无DMA同步事件
整理删除"DMSFC_DSYN."从而得到上式。
注 意 事 项 : 从本版本起可正式淘汰SREG数组指针,只是为兼容而保留.
声 明 : 雁塔菜农拥有对本文件的最终解释和灌溉权。
---------------------------------------------------------------------------*/
#ifndef __C5402CFG_H
#define __C5402CFG_H
#ifdef __cplusplus
extern "C"
{
#endif
/*---------------------------------------------------------*/
typedef volatile unsigned int TI_REG;
typedef volatile unsigned int * TI_PREG;
typedef volatile unsigned int ** TI_PPREG;
typedef volatile int TI_IREG;
typedef volatile unsigned long TI_LREG;
typedef volatile unsigned long * TI_PLREG;
typedef volatile long TI_ILREG;
typedef volatile unsigned long * TI_PILREG;
typedef unsigned int __TI_REG;
typedef unsigned int * __TI_PREG;
typedef int __TI_IREG;
typedef unsigned int * __TI_PIREG;
typedef unsigned long __TI_LREG;
typedef unsigned long * __TI_PLREG;
typedef long __TI_ILREG;
typedef unsigned long * __TI_PILREG;
#define nop() asm(" nop");//空操作
#define __nop() asm(" nop");//空操作
#define _nop_() asm(" nop");//空操作
#define idle() asm(" IDLE 1");
#define idle1() asm(" IDLE 1");//CPU暂停,CPU时钟停止\
;//非屏蔽内部硬件中断\
;//非屏蔽外部硬件中断
#define idle2() asm(" IDLE 2");//CPU时钟停止
#define idle3() asm(" IDLE 3");//外设时钟停止
#define Reset() asm(" TRAP 0");//DSP复位
#define Disable() asm(" ssbx intm");//关中断
#define Enable() asm(" rsbx intm");//开中断
/*-------------------------------------------
以下是增订部分
-------------------------------------------*/
#define __disable_interrupt() asm(" ssbx intm");//关中断
#define __enable_interrupt() asm(" rsbx intm");//开中断
#define __sleep() asm(" IDLE 1");//休眠
#define __no_operation() asm(" nop");//空操作
#define SWI_Reset() asm(" TRAP 0");//DSP软件复位
/*-------------------------------------------
以下是增订部分,去除(1<<15)编译警告
-------------------------------------------*/
#define __0 ((TI_REG)0)
#define __1 ((TI_REG)1)
#define __2 ((TI_REG)2)
#define __3 ((TI_REG)3)
#define __4 ((TI_REG)4)
#define __5 ((TI_REG)5)
#define __6 ((TI_REG)6)
#define __7 ((TI_REG)7)
#define __8 ((TI_REG)8)
#define __9 ((TI_REG)9)
#define __10 ((TI_REG)10)
#define __11 ((TI_REG)11)
#define __12 ((TI_REG)12)
#define __13 ((TI_REG)13)
#define __14 ((TI_REG)14)
#define __15 ((TI_REG)15)
/*-----------------------------------------*/
/*-------------------------------------------
以下是不需要汇编的中断向量表定义部分
-------------------------------------------*/
extern void c_int00(void);//
extern interrupt void DefaultIsr(void);
enum DspCodeEnum_Enum
{
DSPCODE_BD = (TI_IREG)0xf273u,//BD address
DSPCODE_B = (TI_IREG)0xf073u,//B address
DSPCODE_RETE = (TI_IREG)0xf4fbu,//Rete
DSPCODE_NOP = (TI_IREG)0xf495u,//Nop
DSPCODE_SP_200L = (TI_IREG)0x7718u,//STM #200,SP
DSPCODE_SP_200H = (TI_IREG)0x00c8u//STM #200,SP
};
#define INTR(nISR) (DSPCODE_INTR + (TI_IREG)(nISR) & 0x1f)
#define ISR_Reset() {DSPCODE_BD, (pfnVectorEntry)c_int00, DSPCODE_SP_200L, DSPCODE_SP_200H}
#define ISR_Return() {DSPCODE_RETE, (pfnVectorEntry)DSPCODE_NOP, DSPCODE_NOP, DSPCODE_NOP}
#define ISR_Default() {DSPCODE_BD, (pfnVectorEntry)DefaultIsr, DSPCODE_NOP, DSPCODE_NOP}
#define ISR(addr) {DSPCODE_BD, (pfnVectorEntry)addr, DSPCODE_NOP, DSPCODE_NOP}
//注意:宏ISR_Load()调用前应该关闭中断,装载后再开放中断
#define ISR_Load(nISR, addr) {g_pfnVectors[nISR].Isr = (pfnVectorEntry)addr;}
//注意:宏ISR_UnLoad()调用前应该关闭中断,卸载后再开放中断
#define ISR_UnLoad(nISR) {g_pfnVectors[nISR].Isr = (pfnVectorEntry)DefaultIsr;}
typedef interrupt void (*pfnVectorEntry)(void);//中断函数指针
typedef struct
{
TI_IREG Code;//嵌入汇编代码
pfnVectorEntry Isr;//中断入口地址
TI_IREG DataLow;//嵌入汇编代码或数据
TI_IREG DataHi;//嵌入汇编代码或数据
}uVectorEntry;
/*
应用:废除汇编的启动代码(中断向量表)
#pragma DATA_SECTION("vectors")
const uVectorEntry g_pfnVectors[] = {
ISR_Reset(), //reset 0x0080 #0//软硬件复位nISR_REST
ISR_Default(), //nmi 0x0084 #1//非屏蔽中断nISR_NMI
ISR_Default(), //sint17 0x0088 #2//软件中断17
ISR_Default(), //sint18 0x008c #3//软件中断18
ISR_Default(), //sint19 0x0090 #4//软件中断19
ISR_Default(), //sint20 0x0094 #5//软件中断20
ISR_Default(), //sint21 0x0098 #6//软件中断21
ISR_Default(), //sint22 0x009c #7//软件中断22
ISR_Default(), //sint23 0x00a0 #8//软件中断23
ISR_Default(), //sint24 0x00a4 #9//软件中断24
ISR_Default(), //sint25 0x00a8 #10//软件中断25
ISR_Default(), //sint26 0x00ac #11//软件中断26
ISR_Default(), //sint27 0x00b0 #12//软件中断27
ISR_Default(), //sint28 0x00b4 #13//软件中断28
ISR_Default(), //sint29 0x00b8 #14//软件中断29
ISR_Default(), //sint30 0x00bc #15//软件中断30
ISR(Eint0Isr), //int0 0x00c0 #16//外部中断0
ISR(Eint1Isr), //int1 0x00c4 #17//外部中断1
ISR(Eint2Isr), //int2 0x00c8 #18//外部中断2
ISR(Timer0Isr),//tint 0x00cc #19//定时器中断0
ISR(McBSPIsr), //rint0 0x00d0 #20//McBSP0接收中断
ISR_Default(), //xint0 0x00d4 #21//McBSP0发送中断
ISR_Default(), //rint1 0x00d8 #22//McBSP1接收中断
ISR(Timer1Isr),//xint1 0x00dc #23//定时器中断1
ISR(Eint3Isr), //int3 0x00e0 #24//外部中断3
ISR_Default(), //hpint 0x00e4 #25//HPI中断
ISR_Default(), // 0x00e8 #26//软件中断10
ISR_Default(), // 0x00ec #27//软件中断11
ISR_Default(), // 0x00f0 #28//软件中断12
ISR_Default(), // 0x00f4 #29//软件中断13
ISR_Default(), // 0x00f8 #30//保留0
ISR_Default(), // 0x00fc #31//保留1
};
extern "C" interrupt void DefaultIsr(void)
{
}
*/
/*----------------------------------------
中断号定义
ISR_EVT_INT0 External User Interrupt #0
ISR_EVT_INT1 External User Interrupt #1
ISR_EVT_INT2 External User Interrupt #2
ISR_EVT_INT3 External User Interrupt #3
ISR_EVT_TINT0 Timer 0 Interrupt
ISR_EVT_HINT Host Interrupt (HPI)
ISR_EVT_DMA0 DMA Channel 0 Interrupt
ISR_EVT_DMA1 DMA Channel 1 Interrupt
ISR_EVT_DMA2 DMA Channel 2 Interrupt
ISR_EVT_DMA3 DMA Channel 3 Interrupt
ISR_EVT_DMA4 DMA Channel 4 Interrupt
ISR_EVT_DMA5 DMA Channel 5 Interrupt
ISR_EVT_RINT0 MCBSP Port #0 Receive Interrupt
ISR_EVT_XINT0 MCBSP Port #0 Transmit Interrupt
ISR_EVT_RINT2 MCBSP Port #2 Receive Interrupt
ISR_EVT_XINT2 MCBSP Port #2 Transmit Interrupt
ISR_EVT_TINT1 Timer #1 Interrupt
ISR_EVT_HPINT Host Interrupt (HPI)
ISR_EVT_RINT1 MCBSP Port #1 Receive Interrupt
ISR_EVT_XINT1 MCBSP Port #1 Transmit Interrupt
ISR_EVT_IPINT FIFO Full Interrupt
ISR_EVT_SINT14 Software Interrupt #14
ISR_EVT_WDTINT Watchdog Timer Interrupt
ISR_EVT_UART UART Interrupt
ISR_EVT_DAARCV DAA Receive Interrupt
ISR_EVT_DAA_XMT DAA Transmit Interrupt
----------------------------------------*/
/*
#define nISR_REST 0 //0x0080//软硬件复位
#define nISR_NMI 1 //0x0084//非屏蔽中断
#define nISR_SINT16 1 //0x0084//软件中断16
#define nISR_SINT17 2 //0x0088//软件中断17
#define nISR_SINT18 3 //0x008c//软件中断18
#define nISR_SINT19 4 //0x0090//软件中断19
#define nISR_SINT20 5 //0x0094//软件中断20
#define nISR_SINT21 6 //0x0098//软件中断21
#define nISR_SINT22 7 //0x009c//软件中断22
#define nISR_SINT23 8 //0x00a0//软件中断23
#define nISR_SINT24 9 //0x00a4//软件中断24
#define nISR_SINT25 10 //0x00a8//软件中?5
#define nISR_SINT26 11 //0x00ac//软件中断26
#define nISR_SINT27 12 //0x00b0//软件中断27
#define nISR_SINT28 13 //0x00b4//软件卸?8
#define nISR_SINT29 14 //0x00b8//软件中断29
#define nISR_SINT30 15 //0x00bc//软件中断30
#define nISR_INT0 16 //0x00c0//外部中断0
#define nISR_SINT0 16 //0x00c0//软件0
#define nISR_INT1 17 //0x00c4//外部中断1
#define nISR_SINT1 17 //0x00c4//软件中断1
#define nISR_INT2 18 //0x00c8//外部中断2
#define nISR_SINT2 18 //0x00c8//软件中断2
#define nISR_TINT0 19 //0x00cc//定时器中断0
#define nISR_TIMER0 19 //0x00cc//定时器中断0
#define nISR_SINT3 19 //0x00cc//软件中断3
#define nISR_BRINT0 20 //0x00d0//McBSP0接收中断
#define nISR_SINT4 20 //0x00d0//软件中断4
#define nISR_BXINT0 21 //0x00d4//McBSP0发送中断
#define nISR_SINT5 21 //0x00d4//软件中断5
#define nISR_DMAC0INT 22 //0x00d8//DMA通道0中断(与DMPREC_INTOSEL无关)
#define nISR_SINT6 22 //0x00d8//软件中断6
#define nISR_TIMER1 23 //0x00dc//定时器中断1(DMPREC_INTOSEL=0,1)
#define nISR_DMAC1INT 23 //0x00dc//DMA通道1中断(DMPREC_INTOSEL=2)
#define nISR_SINT7 23 //0x00dc//软件中断7
#define nISR_INT3 24 //0x00e0//外部中断3
#define nISR_SINT8 24 //0x00e0//软件中断8
#define nISR_HPINT 25 //0x00e4//HPI中断
#define nISR_SINT9 25 //0x00e4//软件中断9
#define nISR_BRINT1 26 //0x00e8//McBSP1接收中断(DMPREC_INTOSEL=0)
#define nISR_DMAC2INT 26 //0x00e8//DMA通道2中断(DMPREC_INTOSEL=1,2)
#define nISR_SINT10 26 //0x00e8//软件中断10
#define nISR_BXINT1 27 //0x00ec//McBSP1发送中断(DMPREC_INTOSEL=0)
#define nISR_DMAC3INT 27 //0x00ec//DMA通道3中断(DMPREC_INTOSEL=1,2)
#define nISR_SINT11 27 //0x00ec//软件中断11
#define nISR_DMAC4INT 28 //0x00f0//DMA通道4中断(与DMPREC_INTOSEL无关)
#define nISR_SINT12 28 //0x00f0//软件中断12
#define nISR_DMAC5INT 29 //0x00f4//DMA通道5中断(与DMPREC_INTOSEL无关)
#define nISR_SINT13 29 //0x00f4//软件中断13
#define nISR_RESINT0 30 //0x00f8//保留0
#define nISR_RESINT1 31 //0x00fc//保留1
*/
/*----------------------------------------
中断号枚举
----------------------------------------*/
enum nISR
{
nISR_REST = 0, //0x0080//软硬件复位
nISR_NMI = 1, //0x0084//非屏蔽中断
nISR_SINT16 = 1, //0x0084//软件中断16
nISR_SINT17 =2, //0x0088//软件中断17
nISR_SINT18 = 3, //0x008c//软件中断18
nISR_SINT19 = 4, //0x0090//软件中断19
nISR_SINT20 = 5, //0x0094//软件中断20
nISR_SINT21 = 6, //0x0098//软件中断21
nISR_SINT22 = 7, //0x009c//软件中断22
nISR_SINT23 = 8, //0x00a0//软件中断23
nISR_SINT24 = 9, //0x00a4//软件中断24
nISR_SINT25 = 10, //0x00a8//软件中?5
nISR_SINT26 = 11, //0x00ac//软件中断26
nISR_SINT27 = 12, //0x00b0//软件中断27
nISR_SINT28 = 13, //0x00b4//软件中断28
nISR_SINT29 = 14, //0x00b8//软件中断29
nISR_SINT30 = 15, //0x00bc//软件中断30
nISR_INT0 = 16, //0x00c0//外部中断0
nISR_SINT0 = 16, //0x00c0//软件0
nISR_INT1 = 17, //0x00c4//外部中断1
nISR_SINT1 = 17, //0x00c4//软件中断1
nISR_INT2 = 18, //0x00c8//外部中断2
nISR_SINT2 = 18, //0x00c8//软件中断2
nISR_TINT0 = 19, //0x00cc//定时器中断0
nISR_TIMER0 = 19, //0x00cc//定时器中断0
nISR_SINT3 = 19, //0x00cc//软件中断3
nISR_BRINT0 = 20, //0x00d0//McBSP0接收中断
nISR_SINT4 = 20, //0x00d0//软件中断4
nISR_BXINT0 = 21, //0x00d4//McBSP0发送中断
nISR_SINT5 = 21, //0x00d4//软件中断5
nISR_DMAC0INT = 22, //0x00d8//DMA通道0中断(与DMPREC_INTOSEL无关)
nISR_SINT6 = 22, //0x00d8//软件中断6
nISR_TIMER1 = 23, //0x00dc//定时器中断1(DMPREC_INTOSEL=0,1)
nISR_DMAC1INT = 23, //0x00dc//DMA通道1中断(DMPREC_INTOSEL=2)
nISR_SINT7 = 23, //0x00dc//软件中断7
nISR_INT3 = 24, //0x00e0//外部中断3
nISR_SINT8 = 24, //0x00e0//软件中断8
nISR_HPINT = 25, //0x00e4//HPI中断
nISR_SINT9 = 25, //0x00e4//软件中断9
nISR_BRINT1 = 26, //0x00e8//McBSP1接收中断(DMPREC_INTOSEL=0)
nISR_DMAC2INT = 26, //0x00e8//DMA通道2中断(DMPREC_INTOSEL=1,2)
nISR_SINT10 = 26, //0x00e8//软件中断10
nISR_BXINT1 = 27, //0x00ec//McBSP1发送中断(DMPREC_INTOSEL=0)
nISR_DMAC3INT = 27, //0x00ec//DMA通道3中断(DMPREC_INTOSEL=1,2)
nISR_SINT11 = 27, //0x00ec//软件中断11
nISR_DMAC4INT = 28, //0x00f0//DMA通道4中断(与DMPREC_INTOSEL无关)
nISR_SINT12 = 28, //0x00f0//软件中断12
nISR_DMAC5INT = 29, //0x00f4//DMA通道5中断(与DMPREC_INTOSEL无关)
nISR_SINT13 = 29, //0x00f4//软件中断13
nISR_RESINT0 = 30, //0x00f8//保留0
nISR_RESINT1 = 31 //0x00fc//保留1
};
enum ISR//雷同CSL的ISR枚举
{
ISR_EVT_RS = 0,//Reset
ISR_EVT_NMI = 1,//Non-Maskable Interrupt (NMI)
ISR_EVT_SINT0 = 16,//Software Interrupt #0
ISR_EVT_SINT1 = 17,//Software Interrupt #1
ISR_EVT_SINT2 = 18,//Software Interrupt #2
ISR_EVT_SINT3 = 19,//Software Interrupt #3
ISR_EVT_SINT4 = 20,//Software Interrupt #4
ISR_EVT_SINT5 = 21,//Software Interrupt #5
ISR_EVT_SINT6 = 22,//Software Interrupt #6
ISR_EVT_SINT7 = 23,//Software Interrupt #7
ISR_EVT_SINT8 = 24,//Software Interrupt #8
ISR_EVT_SINT9 = 25,//Software Interrupt #9
ISR_EVT_SINT10 = 26,//Software Interrupt #10
ISR_EVT_SINT11 = 27,//Software Interrupt #11
ISR_EVT_SINT12 = 28,//Software Interrupt #12
ISR_EVT_SINT13 = 29,//Software Interrupt #13
ISR_EVT_SINT16 = 1,//Software Interrupt #16
ISR_EVT_SINT17 = 2,//Software Interrupt #17
ISR_EVT_SINT18 = 3,//Software Interrupt #18
ISR_EVT_SINT19 = 4,//Software Interrupt #19
ISR_EVT_SINT20 = 5,//Software Interrupt #20
ISR_EVT_SINT21 = 6,//Software Interrupt #21
ISR_EVT_SINT22 = 7,//Software Interrupt #22
ISR_EVT_SINT23 = 8,//Software Interrupt #23
ISR_EVT_SINT24 = 9,//Software Interrupt #24
ISR_EVT_SINT25 = 10,//Software Interrupt #25
ISR_EVT_SINT26 = 11,//Software Interrupt #26
ISR_EVT_SINT27 = 12,//Software Interrupt #27
ISR_EVT_SINT28 = 13,//Software Interrupt #28
ISR_EVT_SINT29 = 14,//Software Interrupt #29
ISR_EVT_SINT30 = 15,//Software Interrupt #30
ISR_EVT_INT0 = 16,//External User Interrupt #0
ISR_EVT_INT1 = 17,//External User Interrupt #1
ISR_EVT_INT2 = 18,//External User Interrupt #2
ISR_EVT_INT3 = 24,//External User Interrupt #3
ISR_EVT_TINT0 = 19,//Timer 0 Interrupt
ISR_EVT_HINT = 25,//Host Interrupt (HPI)
ISR_EVT_DMA0 = 22,//DMA Channel 0 Interrupt
ISR_EVT_DMA1 = 23,//DMA Channel 1 Interrupt
ISR_EVT_DMA2 = 26,//DMA Channel 2 Interrupt
ISR_EVT_DMA3 = 27,//DMA Channel 3 Interrupt
ISR_EVT_DMA4 = 28,//DMA Channel 4 Interrupt
ISR_EVT_DMA5 = 29,//DMA Channel 5 Interrupt
ISR_EVT_RINT0 = 20,//MCBSP Port #0 Receive Interrupt
ISR_EVT_XINT0 = 21,//MCBSP Port #0 Transmit Interrupt
ISR_EVT_TINT1 = 23,//Timer #1 Interrupt
ISR_EVT_HPINT = 25,//Host Interrupt (HPI)
ISR_EVT_RINT1 = 26,//MCBSP Port #1 Receive Interrupt
ISR_EVT_XINT1 = 27 //MCBSP Port #1 Transmit Interrupt
};
/*----------------------------------------
基本位定义
----------------------------------------*/
/*
#define BIT0 0//
#define BIT1 1//
#define BIT2 2//
#define BIT3 3//
#define BIT4 4//
#define BIT5 5//
#define BIT6 6//
#define BIT7 7//
#define BIT8 8//
#define BIT9 9//
#define BIT10 10//
#define BIT11 11//
#define BIT12 12//
#define BIT13 13//
#define BIT14 14//
#define BIT15 15//
*/
/*----------------------------------------
基本位枚举
----------------------------------------*/
enum BIT
{
BIT0 = 0,//
BIT1 = 1,//
BIT2 = 2,//
BIT3 = 3,//
BIT4 = 4,//
BIT5 = 5,//
BIT6 = 6,//
BIT7 = 7,//
BIT8 = 8,//
BIT9 = 9,//
BIT10 = 10,//
BIT11 = 11,//
BIT12 = 12,//
BIT13 = 13,//
BIT14 = 14,//
BIT15 = 15//
};
//不解为何5402和一般的位域次序相反
typedef volatile struct
{
TI_REG bit15: 1;//15
TI_REG bit14: 1;//14
TI_REG bit13: 1;//13
TI_REG bit12: 1;//12
TI_REG bit11: 1;//11
TI_REG bit10: 1;//10
TI_REG bit9: 1;//9
TI_REG bit8: 1;//8
TI_REG bit7: 1;//7
TI_REG bit6: 1;//6
TI_REG bit5: 1;//5
TI_REG bit4: 1;//4
TI_REG bit3: 1;//3
TI_REG bit2: 1;//2
TI_REG bit1: 1;//1
TI_REG bit0: 1;//0
}TI_BITS_BASE, *TI_BITS_PBASE;
typedef volatile union
{
TI_REG Regs;
TI_BITS_BASE Bits;
}TI_REG_BASE, *TI_REG_PBASE;
/*---------------------------------------
GPIOCR位定义
----------------------------------------*/
/*
#define GPIOCR_DIR0 0//I/O引脚方向位0
#define GPIOCR_DIR1 1//I/O引脚方向位1
#define GPIOCR_DIR2 2//I/O引脚方向位2
#define GPIOCR_DIR3 3//I/O引脚方向位3
#define GPIOCR_DIR4 4//I/O引脚方向位4
#define GPIOCR_DIR5 5//I/O引脚方向位5
#define GPIOCR_DIR6 6//I/O引脚方向?
#define GPIOCR_DIR7 7//I/O引脚方向位7
#define GPIOCR_TOUT1 15//定时器1输出使能位
*/
/*---------------------------------------
GPIOCR位枚举
----------------------------------------*/
enum GPIOCR
{
GPIOCR_DIR0 = 0,//I/O引脚方向位0
GPIOCR_DIR1 = 1,//I/O引脚方向位1
GPIOCR_DIR2 = 2,//I/O引脚方向位2
GPIOCR_DIR3 = 3,//I/O引脚方向位3
GPIOCR_DIR4 = 4,//I/O引脚方向位4
GPIOCR_DIR5 = 5,//I/O引脚方向位5
GPIOCR_DIR6 = 6,//I/O引脚方向?
GPIOCR_DIR7 = 7,//I/O引脚方向位7
GPIOCR_TOUT1 = 15//定时器1输出使能位
};
typedef volatile struct
{
TI_REG TOUT1: 1;////定时器1输出使能位15
TI_REG Reserved: 7;//保留位8~14
TI_REG DIR7: 1;//I/O引脚方向位7
TI_REG DIR6: 1;//I/O引脚方向位6
TI_REG DIR5: 1;//I/O引脚方向位5
TI_REG DIR4: 1;//I/O引脚方向位4
TI_REG DIR3: 1;//I/O引脚方向位3
TI_REG DIR2: 1;//I/O引脚方向位2
TI_REG DIR1: 1;//I/O引脚方向位1
TI_REG DIR0: 1;//I/O引脚方向位0
}TI_BITS_GPIOCR, *TI_BITS_PGPIOCR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_GPIOCR Bits;
}TI_REG_GPIOCR, *TI_REG_PGPIOCR;
/*---------------------------------------
GPIOSR位定义
----------------------------------------*/
/*
#define GPIOSR_IO0 0//I/O引脚状态位0
#define GPIOSR_IO1 1//I/O引脚状态位1
#define GPIOSR_IO2 2//I/O引脚状态位2
#define GPIOSR_IO3 3//I/O引脚状态位3
#define GPIOSR_IO4 4//I/O引脚状态位4
#define GPIOSR_IO5 5//I/O引脚状态位5
#define GPIOSR_IO6 6//I/O引脚状态位6
#define GPIOSR_IO7 7//I/O引脚状态位7
*/
/*---------------------------------------
GPIOSR位枚举
----------------------------------------*/
enum GPIOSR
{
GPIOSR_IO0 = 0,//I/O引脚状态位0
GPIOSR_IO1 = 1,//I/O引脚状态位1
GPIOSR_IO2 = 2,//I/O引脚状态位2
GPIOSR_IO3 = 3,//I/O引脚状态位3
GPIOSR_IO4 = 4,//I/O引脚状态位4
GPIOSR_IO5 = 5,//I/O引脚状态位5
GPIOSR_IO6 = 6,//I/O引脚状态位6
GPIOSR_IO7 = 7//I/O引脚状态位7
};
typedef volatile struct
{
TI_REG Reserved: 8;//保留位8~15
TI_REG IO7: 1;//I/O引脚状态位7
TI_REG IO6: 1;//I/O引脚状态位6
TI_REG IO5: 1;//I/O引脚状态位5
TI_REG IO4: 1;//I/O引脚状态位4
TI_REG IO3: 1;//I/O引脚状态位3
TI_REG IO2: 1;//I/O引脚状态位2
TI_REG IO1: 1;//I/O引脚状态位1
TI_REG IO0: 1;//I/O脚状态位0
}TI_BITS_GPIOSR, *TI_BITS_PGPIOSR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_GPIOSR Bits;
}TI_REG_GPIOSR, *TI_REG_PGPIOSR;
/*---------------------------------------
HPIC位定义
----------------------------------------*/
/*
#define HPIC_DSPINT 1//主机处理器到C5402的中断(R-0)
#define HPIC_HINT 2//C5402到主机处理器的中断引脚状态(R/W-1)
#define HPIC_HRDY 3//HRDY引脚状态(R)
#define HPIC_FETCH 4//主机取数据请求(R-0)
#define HPIC_XHPIA 5//扩展地址使能(R)
*/
/*---------------------------------------
HPIC位枚举
----------------------------------------*/
enum HPIC
{
HPIC_DSPINT = 1,//主机处理器到C5402的中断(R-0)
HPIC_HINT = 2,//C5402到主机处理器的中断引脚状态(R/W-1)
HPIC_HRDY = 3,//HRDY引脚状态(R)
HPIC_FETCH = 4,//主机取数据请求(R-0)
HPIC_XHPIA = 5//扩展地址使能(R)
};
typedef volatile struct
{
TI_REG Reserved: 10;//保留位6~15
TI_REG XHPIA: 1;//扩展地址使能(R)5
TI_REG FETCH: 1;//主机取数据请求(R-0)4
TI_REG HRDY: 1;//HRDY引脚状态(R)3
TI_REG HINT: 1;//C5402到主机处理器的中断引脚状态(R/W-1)2
TI_REG DSPINT: 2;//主机处理器到C5402的中断(R-0)0~1
}TI_BITS_HPIC, *TI_BITS_PHPIC;
typedef volatile union
{
TI_REG Regs;
TI_BITS_HPIC Bits;
}TI_REG_HPIC, *TI_REG_PHPIC;
/*---------------------------------------
CLKMD位定义
----------------------------------------*/
/*
#define CLKMD_PLLSTATUS 0//PLL状态位
#define CLKMD_PLLNDIV 1//PLL时钟发生器选择
#define CLKMD_PLLONOFF 2//PLL开关位
#define CLKMD_PLLCOUNT 3//PLL计数值3~10
#define CLKMD_PLLDIV 11//PLL乘法系数(除法器)
#define CLKMD_PLLMUL 12//PLL乘法系数(乘法器)12~15
*/
/*---------------------------------------
CLKMD位枚举
----------------------------------------*/
enum CLKMD
{
CLKMD_PLLSTATUS = 0,//PLL状态位
CLKMD_PLLNDIV = 1,//PLL时钟发生器选择
CLKMD_PLLONOFF = 2,//PLL开关位
CLKMD_PLLCOUNT = 3,//PLL计数值3~10
CLKMD_PLLDIV = 11,//PLL乘法系数(除法器)
CLKMD_PLLMUL = 12//PLL乘法系数(乘法器)12~15
};
typedef volatile struct
{
TI_REG PLLMUL: 4;//PLL乘法系数(乘法器)12~15
TI_REG PLLDIV: 1;//PLL乘法系数(除法器)
TI_REG PLLCOUNT: 8;//PLL计数值3~10
TI_REG PLLONOFF: 1;//PLL开关位2
TI_REG PLLNDIV: 1;//PLL钟发生器选择1
TI_REG PLLSTATUS: 1;//PLL状态位0
}TI_BITS_CLKMD, *TI_BITS_PCLKMD;
typedef volatile union
{
TI_REG Regs;
TI_BITS_CLKMD Bits;
}TI_REG_CLKMD, *TI_REG_PCLKMD;
/*---------------------------------------
PMST位定义
----------------------------------------*/
/*
#define PMST_SST 0//存储饱和位
#define PMST_SMUL 1//乘法饱和位
#define PMST_CLKOFF 2//CLKOUT禁止位
#define PMST_DROM 3//数据ROM位
#define PMST_AVIS 4//地址可见性模式位
#define PMST_OVLY 5//RAM重叠位
#define PMST_MP_MC 6//微处理器/微计算机模式位
#define PMST_IPTR 7//中断向量指针7~15
*/
/*---------------------------------------
PMST位枚举
----------------------------------------*/
enum PMST
{
PMST_SST = 0,//存储饱和位
PMST_SMUL = 1,//乘法饱和位
PMST_CLKOFF = 2,//CLKOUT禁止位
PMST_DROM = 3,//数据ROM位
PMST_AVIS = 4,//地址可见性模式位
PMST_OVLY = 5,//RAM重叠位
PMST_MP_MC = 6,//微处理器/微计算机模式位
PMST_IPTR = 7//中断向量指针7~15
};
typedef volatile struct
{
TI_REG IPTR: 9;//中断向量指针7~15
TI_REG MP_MC: 1;//微处理器/微计算机模式位6
TI_REG OVLY: 1;//RAM重叠位5
TI_REG AVIS: 1;//地址可见性模式位4
TI_REG DROM: 1;//数据ROM位3
TI_REG CLKOFF: 1;//CLKOUT禁止位2
TI_REG SMUL: 1;//乘法饱和位1
TI_REG SST: 1;//存储饱和位0
}TI_BITS_PMST, *TI_BITS_PPMST;
typedef volatile union
{
TI_REG Regs;
TI_BITS_PMST Bits;
}TI_REG_PMST, *TI_REG_PPMST;
/*---------------------------------------
TCR位定义
----------------------------------------*/
/*
#define TCR_TDDR 0//定时器分频系数0~3
#define TCR_TSS 4//定时器停止状态
#define TCR_TRB 5//定时器重载
#define TCR_PSC 6//计数器预定标计数器6~9
#define TCR_FREE 10//
#define TCR_SOFT 11//
*/
/*---------------------------------------
TCR位枚举
----------------------------------------*/
enum TCR
{
TCR_TDDR = 0,//定时器分频系数0~3
TCR_TSS = 4,//定时器停止状态
TCR_TRB = 5,//定时器重载
TCR_PSC = 6,//计数器预定标计数器6~9
TCR_FREE = 10,//
TCR_SOFT = 11//
};
typedef volatile struct
{
TI_REG Reserved: 4;//保留位12~15
TI_REG SOFT: 1;//11
TI_REG FREE: 1;//10
TI_REG PSC: 4;//计数器预定标计数器6~9
TI_REG TRB: 1;//定时器重载5
TI_REG TSS: 1;//定时器停止状态4
TI_REG TDDR: 4;//定时器分频系数0~3
}TI_BITS_TCR, *TI_BITS_PTCR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_TCR Bits;
}TI_REG_TCR, *TI_REG_PTCR;
/*---------------------------------------
IFR位定义
----------------------------------------*/
/*
#define IFR_INT0 0//外部中断0
#define IFR_INT1 1//外部中断1
#define IFR_INT2 2//外部中断2
#define IFR_TINT0 3//定时中断0
#define IFR_BRINT0 4//McBSP接收中断0
#define IFR_BXINT0 5//McBSP发送中断0
#define IFR_TINT1 7//定时中断1
#define IFR_INT3 8//外部中断3
#define IFR_HPINT 9//主机接口中断
#define IFR_BRINT1 10//McBSP接收中断1
#define IFR_BXINT1 11//McBSP发送中断1
#define IFR_DMAC0 6//DMA通道中断0
#define IFR_DMAC1 7//DMA通道中断1
#define IFR_DMAC2 10//DMA通道中断2
#define IFR_DMAC3 11//DMA通道中?
#define IFR_DMAC4 12//DMA通道中断4
#define IFR_DMAC5 13//DMA通道中断5
*/
/*---------------------------------------
IFR位枚举
----------------------------------------*/
enum IFR
{
IFR_INT0 = 0,//外部中断0
IFR_INT1 = 1,//外部中断1
IFR_INT2 = 2,//外部中断2
IFR_TINT0 = 3,//定时中断0
IFR_BRINT0 = 4,//McBSP接收中断0
IFR_BXINT0 = 5,//McBSP发送中断0
IFR_TINT1 = 7,//定时中断1
IFR_INT3 = 8,//外部中断3
IFR_HPINT = 9,//主机接口中断
IFR_BRINT1 = 10,//McBSP接收中断1
IFR_BXINT1 = 11,//McBSP发送中断1
IFR_DMAC0 = 6,//DMA通道中断0
IFR_DMAC1 = 7,//DMA通道中断1
IFR_DMAC2 = 10,//DMA通道中断2
IFR_DMAC3 = 11,//DMA通道中?
IFR_DMAC4 = 12,//DMA通道中断4
IFR_DMAC5 = 13//DMA通道中断5
};
typedef volatile struct
{
TI_REG Reserved: 2;//保留位14~15
TI_REG DMAC5: 1;//DMA通道中断5 13
TI_REG DMAC4: 1;//DMA通道中断4 12
// TI_REG BXINT1: 1;//McBSP发送中断1 11
TI_REG DMAC3: 1;//DMA通道中断3 11
// TI_REG BRINT1: 1;//McBSP接收中断1 10
TI_REG DMAC2: 1;//DMA通道中断2 10
TI_REG HPINT: 1;//主机接口中断9
TI_REG INT3: 1;//外部中断3 8
// TI_REG TINT1: 1;//定时中断1 7
TI_REG DMAC1: 1;//DMA通道中断1 7
TI_REG DMAC0: 1;//DMA通道中断0 6
TI_REG BXINT0: 1;//McBSP发送中断0 5
TI_REG BRINT0: 1;//McBSP接收中断0 4
TI_REG TINT0: 1;//定时中断0 3
TI_REG INT2: 1;//外部中断2 2
TI_REG INT1: 1;//外部中断1 1
TI_REG INT0: 1;//外部中断0 0
}TI_BITS_IFR_DMA, *TI_BITS_PIFR_DMA;
typedef volatile struct
{
TI_REG Reserved: 2;//保留位14~15
TI_REG DMAC5: 1;//DMA通道中断5 13
TI_REG DMAC4: 1;//DMA通道中断4 12
TI_REG BXINT1: 1;//McBSP发送中断1 11
// TI_REG DMAC3: 1;//DMA通道中断3 11
TI_REG BRINT1: 1;//McBSP接收中断1 10
// TI_REG DMAC2: 1;//DMA通道中断2 10
TI_REG HPINT: 1;//主机接口中断9
TI_REG INT3: 1;//外部中断3 8
TI_REG TINT1: 1;//定时中断1 7
// TI_REG DMAC1: 1;//DMA通道中断1 7
TI_REG DMAC0: 1;//DMA通道中断0 6
TI_REG BXINT0: 1;//McBSP发送中断0 5
TI_REG BRINT0: 1;//McBSP接收中断0 4
TI_REG TINT0: 1;//定时中断0 3
TI_REG INT2: 1;//外部中断2 2
TI_REG INT1: 1;//外部中断1 1
TI_REG INT0: 1;//外部中断0 0
}TI_BITS_IFR, *TI_BITS_PIFR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_IFR Bits;
TI_BITS_IFR_DMA DMA_Bits;//增加对DMA的支持
}TI_REG_IFR, *TI_REG_PIFR;
/*---------------------------------------
IMR位定义
----------------------------------------*/
/*
#define IMR_INT0 0//外部中断0
#define IMR_INT1 1//外部中断1
#define IMR_INT2 2//外部中断2
#define IMR_TINT0 3//定时中断0
#define IMR_BRINT0 4//McBSP接收中断0
#define IMR_BXINT0 5//McBSP发送中断0
#define IMR_TINT1 7//定时中断1
#define IMR_INT3 8//外部中断3
#define IMR_HPINT 9//主机接口中断
#define IMR_BRINT1 10//McBSP接收中断1
#define IMR_BXINT1 11//McBSP发送中断1
#define IMR_DMAC0 6//DMA通道中断0
#define IMR_DMAC1 7//DMA通道中断1
#define IMR_DMAC2 10//DMA通道中断2
#define IMR_DMAC3 11//DMA通道中断3
#define IMR_DMAC4 12//DMA通道中断4
#define IMR_DMAC5 13//DMA通道中断5
*/
/*---------------------------------------
IMR位枚举
----------------------------------------*/
enum IMR
{
IMR_INT0 = 0,//外部中断0
IMR_INT1 = 1,//外部中断1
IMR_INT2 = 2,//外部中断2
IMR_TINT0 = 3,//定时中断0
IMR_BRINT0 = 4,//McBSP接收中断0
IMR_BXINT0 = 5,//McBSP发送中断0
IMR_TINT1 = 7,//定时中断1
IMR_INT3 = 8,//外部中断3
IMR_HPINT = 9,//主机接口中断
IMR_BRINT1 = 10,//McBSP接收中断1
IMR_BXINT1 = 11,//McBSP发送中断1
IMR_DMAC0 = 6,//DMA通道中断0
IMR_DMAC1 = 7,//DMA通道中断1
IMR_DMAC2 = 10,//DMA通道中断2
IMR_DMAC3 = 11,//DMA通道中断3
IMR_DMAC4 = 12,//DMA通道中断4
IMR_DMAC5 = 13//DMA通道中断5
};
typedef volatile struct
{
TI_REG Reserved: 2;//保留位14~15
TI_REG DMAC5: 1;//DMA通道中断5 13
TI_REG DMAC4: 1;//DMA通道中断4 12
// TI_REG BXINT1: 1;//McBSP发送中断1 11
TI_REG DMAC3: 1;//DMA通道中断3 11
// TI_REG BRINT1: 1;//McBSP接收中断1 10
TI_REG DMAC2: 1;//DMA通道中断2 10
TI_REG HPINT: 1;//主机接口中断9
TI_REG INT3: 1;//外部中断3 8
// TI_REG TINT1: 1;//定时中断1 7
TI_REG DMAC1: 1;//DMA通道中断1 7
TI_REG DMAC0: 1;//DMA通道中断0 6
TI_REG BXINT0: 1;//McBSP发送中断0 5
TI_REG BRINT0: 1;//McBSP接收中断0 4
TI_REG TINT0: 1;//定时中断0 3
TI_REG INT2: 1;//外部中断2 2
TI_REG INT1: 1;//外部中断1 1
TI_REG INT0: 1;//外部中断0 0
}TI_BITS_IMR_DMA, *TI_BITS_PIMR_DMA;
typedef volatile struct
{
TI_REG Reserved: 2;//保留位14~15
TI_REG DMAC5: 1;//DMA通道中断5 13
TI_REG DMAC4: 1;//DMA通道中断4 12
TI_REG BXINT1: 1;//McBSP发送中断1 11
// TI_REG DMAC3: 1;//DMA通道中断3 11
TI_REG BRINT1: 1;//McBSP接收中断1 10
// TI_REG DMAC2: 1;//DMA通道中断2 10
TI_REG HPINT: 1;//主机接口中断9
TI_REG INT3: 1;//外部中断3 8
TI_REG TINT1: 1;//定时中断1 7
// TI_REG DMAC1: 1;//DMA通道中断1 7
TI_REG DMAC0: 1;//DMA通道中断0 6
TI_REG BXINT0: 1;//McBSP发送中断0 5
TI_REG BRINT0: 1;//McBSP接收中断0 4
TI_REG TINT0: 1;//定时中断0 3
TI_REG INT2: 1;//外部中断2 2
TI_REG INT1: 1;//外部中断1 1
TI_REG INT0: 1;//外部中断0 0
}TI_BITS_IMR, *TI_BITS_PIMR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_IMR Bits;
TI_BITS_IMR_DMA DMA_Bits;//增加对DMA的支持
}TI_REG_IMR, *TI_REG_PIMR;
/*-------------------------------------------------------------
应用举例:
SREGs.DMA.DMPREC.Bits.INTOSEL = DMPREC_INTOSEL_CH1_TO_CH3;
SREGs.IFR.DMA_Bits.DMAC1 = 1;
SREGs.IMR.DMA_Bits.DMAC1 = 1;
SREGs.DMA.DMPREC.Bits.INTOSEL = DMPREC_INTOSEL_CH2_CH3;
SREGs.IFR.DMA_Bits.DMAC2 = 1;
SREGs.IMR.DMA_Bits.DMAC2 = 1;
--------------------------------------------------------------*/
/*---------------------------------------
ST0位定义
----------------------------------------*/
/*
#define ST0_DP 0//数据存储器页面指针0~8,共9位
#define ST0_OVB 9//累加器B溢出曛疚?
#define ST0_OVA 10//累加器A溢出标志位
#define ST0_C 11//进位或不借位标志
#define ST0_TC 12//测试/控制标志位
#define ST0_ARP 13//辅助寄存器(AR)指针13~15,共3位
*/
/*---------------------------------------
ST0位枚举
----------------------------------------*/
enum ST0
{
ST0_DP = 0,//数据存储器页面指针0~8,共9位
ST0_OVB = 9,//累加器B溢出曛疚?
ST0_OVA = 10,//累加器A溢出标志位
ST0_C = 11,//进位或不借位标志
ST0_TC = 12,//测试/控制标志位
ST0_ARP = 13//辅助寄存器(AR)指针13~15,共3位
};
typedef volatile struct
{
TI_REG ARP: 3;//辅助寄存器(AR)指针13~15,共3位
TI_REG TC: 1;//测试/控制标志位12
TI_REG C: 1;//进位或不借位标志11
TI_REG OVA: 1;//累加器A溢出标志位10
TI_REG OVB: 1;//累加器B溢出标志位9
TI_REG DP: 9;//数据存储器页面指针0~8,共9位
}TI_BITS_ST0, *TI_BITS_PST0;
typedef volatile union
{
TI_REG Regs;
TI_BITS_ST0 Bits;
}TI_REG_ST0, *TI_REG_PST0;
/*---------------------------------------
ST1位定义
----------------------------------------*/
/*
#define ST1_ASM 0//累加器模式位0~4
#define ST1_CMPT 5//修改模式位
#define ST1_FRCT 6//小数方式位
#define ST1_C16 7//双16位/双精度算术模式位
#define ST1_SXM 8//符号扩展模式位
#define ST1_OVM 9//溢出模式位
#define ST1_INTM 11//中断模式位
#define ST1_HM 12//保持模式位
#define ST1_XF 13//XF引脚状态位
#define ST1_CPL 14//相对直接寻址译码髂J轿?
#define ST1_BRAF 15//块重复操作标志位
*/
/*---------------------------------------
ST1位枚举
----------------------------------------*/
enum ST1
{
ST1_ASM = 0,//累加器模式位0~4
ST1_CMPT = 5,//修改模式位
ST1_FRCT = 6,//小数方式位
ST1_C16 = 7,//双16位/双精度算术模式位
ST1_SXM = 8,//符号扩展模式位
ST1_OVM = 9,//溢出模式位
ST1_INTM = 11,//中断模式位
ST1_HM = 12,//保持模式位
ST1_XF = 13,//XF引脚状态位
ST1_CPL = 14,//相对直接寻址译码髂J轿?
ST1_BRAF = 15//块重复操作标志位
};
typedef volatile struct
{
TI_REG BRAF: 1;//块重复操作标志位15
TI_REG CPL: 1;//相对直接寻址译码器模式位14
TI_REG XF: 1;//XF引脚状态位13
TI_REG HM: 1;//保持模式位12
TI_REG INTM: 1;//中断模式位11
TI_REG OVM: 2;//溢出模式位9~10
TI_REG SXM: 1;//符号扩展模式位8
TI_REG C16: 1;//双16位/双精度算术模式位7
TI_REG FRCT: 1;//小数方式位6
TI_REG CMPT: 1;//修改模式位5
TI_REG ASM: 5;//累加器模式位0~4
}TI_BITS_ST1, *TI_BITS_PST1;
typedef volatile union
{
TI_REG Regs;
TI_BITS_ST1 Bits;
}TI_REG_ST1, *TI_REG_PST1;
/*---------------------------------------
BSCR位定义
----------------------------------------*/
/*
#define BSCR_EXIO 0//外部总线接口关断位
#define BSCR_BH 1//总线保持位BH
#define BSCR_HBH 2//主机接口总线保持位
#define BSCR_IPIRQ 8//CPU处理器之间的中断请求位
#define BSCR_PSDS 11//程序空间读/数据空间读访问
#define BSCR_BNKCMP 12//分区比较位12~15
*/
/*---------------------------------------
BSCR位枚举
----------------------------------------*/
enum BSCR
{
BSCR_EXIO = 0,//外部总线接口关断位
BSCR_BH = 1,//总线保持位BH
BSCR_HBH = 2,//主机接口总线保持位
BSCR_IPIRQ = 8,//CPU处理器之间的中断请求位
BSCR_PSDS = 11,//程序空间读/数据空间读访问
BSCR_BNKCMP = 12//分区比较位12~15
};
typedef volatile struct
{
TI_REG BNKCMP: 4;//分区比较位12~15
TI_REG PSDS: 3;//程序空间读/数据空间读访问9~11
TI_REG IPIRQ: 1;///CPU处理器之间的中断请求位8
TI_REG Reserved: 5;//保留位3~7
TI_REG HBH: 1;//主机接口总线保持位2
TI_REG BH: 1;//总线保持位1
TI_REG EXIO: 1;//外部总线接口关断位0
}TI_BITS_BSCR, *TI_BITS_PBSCR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_BSCR Bits;
}TI_REG_BSCR, *TI_REG_PBSCR;
/*---------------------------------------
SPC位定义
----------------------------------------*/
/*
#define SPC_DLB 1//数据回送模式位
#define SPC_FO 2//数据格式位
#define SPC_FSM 3//帧同步模式位
#define SPC_MCM 4//时钟模式位
#define SPC_TXM 5//发送模式位
#define SPC_XRST 6//发送器复位
#define SPC_RRST 7//接收器复位
#define SPC_IN0 8//输入0
#define SPC_IN1 9//输入1
#define SPC_RRDY 10//接收准备位
#define SPC_XRDY 11//发送准备位
#define SPC_XSREMPTY 12//发送移位寄存器空
#define SPC_RSRFULL 13//接收移位寄存器满
#define SPC_FREE 14//
#define SPC_SOFT 15//
*/
/*---------------------------------------
SPC位枚举
----------------------------------------*/
enum SPC
{
SPC_DLB = 1,//数据回送模式位
SPC_FO = 2,//数据格式位
SPC_FSM = 3,//帧同步模式位
SPC_MCM = 4,//时钟模式位
SPC_TXM = 5,//发送模式位
SPC_XRST = 6,//发送器复位
SPC_RRST = 7,//接收器复位
SPC_IN0 = 8,//输入0
SPC_IN1 = 9,//输入1
SPC_RRDY = 10,//接收准备位
SPC_XRDY = 11,//发送准备位
SPC_XSREMPTY = 12,//发送移位寄存器空
SPC_RSRFULL = 13,//接收移位寄存器满
SPC_FREE = 14,//
SPC_SOFT = 15//
};
typedef volatile struct
{
TI_REG SOFT: 1;//15
TI_REG FREE: 1;//14
TI_REG RSRFULL: 1;//接收移位寄存器满13
TI_REG XSREMPTY: 1;//发送移位寄存器空12
TI_REG XRDY: 1;//发送准备位11
TI_REG RRDY: 1;//接收准备位10
TI_REG IN1: 1;//输入1 9
TI_REG IN0: 1;//输入0 8
TI_REG RRST: 1;//接收器复位 7
TI_REG XRST: 1;//发送器复位 6
TI_REG TXM: 1;//发送模式位 5
TI_REG MCM: 1;//时钟模式位 4
TI_REG FSM: 1;//帧同步模式位 3
TI_REG FO: 1;//数据格式位 2
TI_REG DLB: 2;//数据回送模式位 0~1
}TI_BITS_SPC, *TI_BITS_PSPC;
typedef volatile union
{
TI_REG Regs;
TI_BITS_SPC Bits;
}TI_REG_SPC, *TI_REG_PSPC;
/*---------------------------------------
BSPCE位定义
----------------------------------------*/
/*
#define BSPCE_CLKDV 0//内部发送时钟分频系数0~4
#define BSPCE_FSP 5//帧同步信号极性设置
#define BSPCE_CLKP 6//时钟极性设置
#define BSPCE_FE 7//格式扩展
#define BSPCE_FIG 8//帧同步信号忽略
#define BSPCE_PCM 9//脉冲编码模式
#define BSPCE_ABU 10//自动缓冲单元控制10~15
#define BSPCE_BXE 10//自动缓冲发送使能
#define BSPCE_XH 11//发送缓冲半满
#define BSPCE_HALTX 12//自动缓冲发送停止位
#define BSPCE_BRE 13//自动缓冲接收使
#define BSPCE_RH 14//接收缓冲半满
#define BSPCE_HALTR 15//自动缓冲接收停止位
*/
/*---------------------------------------
BSPCE位枚举
----------------------------------------*/
enum BSPCE
{
BSPCE_CLKDV = 0,//内部发送时钟分频系数0~4
BSPCE_FSP = 5,//帧同步信号极性设置
BSPCE_CLKP = 6,//时钟极性设置
BSPCE_FE = 7,//格式扩展
BSPCE_FIG = 8,//帧同步信号忽略
BSPCE_PCM = 9,//脉冲编码模式
BSPCE_ABU = 10,//自动缓冲单元控制10~15
BSPCE_BXE = 10,//自动缓冲发送使能
BSPCE_XH = 11,//发送缓冲半满
BSPCE_HALTX = 12,//自动缓冲发送停止位
BSPCE_BRE = 13,//自动缓冲接收使
BSPCE_RH = 14,//接收缓冲半满
BSPCE_HALTR = 15//自动缓冲接收停止位
};
typedef volatile struct
{
TI_REG HALTR: 1;//自动缓冲接收停止位15
TI_REG RH: 1;//接收缓冲半满14
TI_REG BRE: 1;//自动缓冲接收使能13
TI_REG HALTX: 1;//自动缓冲发送停止位12
TI_REG XH: 1;//发送准备位11
TI_REG BXE: 1;//接收准备位10
TI_REG PCM: 1;//脉冲编码模式9
TI_REG FIG: 1;//帧同步信号忽略8
TI_REG FE: 1;//格式扩展7
TI_REG CLKP: 1;//时钟极性设置6
TI_REG FSP: 1;//帧同步信号极性设置5
TI_REG CLKDV: 5;//内部发送时钟分频系数0~4
}TI_BITS_BSPCE, *TI_BITS_PBSPCE;
typedef volatile union
{
TI_REG Regs;
TI_BITS_BSPCE Bits;
}TI_REG_BSPCE, *TI_REG_PBSPCE;
/*---------------------------------------
SPCR1位定义
----------------------------------------*/
/*
#define SPCR1_RRST 0//接收器复位
#define SPCR1_RRDY 1//接收准备好
#define SPCR1_RFULL 2//接收移位寄存器满
#define SPCR1_RSYNCERR 3//接收同步错
#define SPCR1_RINTM 4//接收中断模式4~5
#define SPCR1_ABIS 6//ABIS模式
#define SPCR1_DXENA 7//DX使能
#define SPCR1_CLKSTP 11//时钟停止模式11~12
#define SPCR1_RJUST 13//接收符号扩展及判别模式13~14
#define SPCR1_DLB 15//数字循环返回
*/
/*---------------------------------------
SPCR1位枚举
----------------------------------------*/
enum SPCR1
{
SPCR1_RRST = 0,//接收器复位
SPCR1_RRDY = 1,//接收准备好
SPCR1_RFULL = 2,//接收移位寄存器满
SPCR1_RSYNCERR = 3,//接收同步错
SPCR1_RINTM = 4,//接收中断模式4~5
SPCR1_ABIS = 6,//ABIS模式
SPCR1_DXENA = 7,//DX使能
SPCR1_CLKSTP = 11,//时钟停止模式11~12
SPCR1_RJUST = 13,//接收符号扩展及判别模式13~14
SPCR1_DLB = 15//数字循环返回
};
typedef volatile struct
{
TI_REG DLB: 1;//数字循环返回15
TI_REG RJUST: 2;//接收符号扩展及判别模式13~14
TI_REG CLKSTP: 2;//时钟停止模式11~12
TI_REG Reserved: 3;//保留位8~10
TI_REG DXENA: 1;//DX使能7
TI_REG ABIS: 1;//ABIS模式6
TI_REG RINTM: 2;//接收中断模式4~5
TI_REG RSYNCERR: 1;//接收同步错3
TI_REG RFULL: 1;//接收移位寄存器满2
TI_REG RRDY: 1;//接收准备好1
TI_REG RRST: 1;//接收器复位0
}TI_BITS_SPCR1, *TI_BITS_PSPCR1;
typedef volatile union
{
TI_REG Regs;
TI_BITS_SPCR1 Bits;
}TI_REG_SPCR1, *TI_REG_PSPCR1;
/*---------------------------------------
SPCR2位定义
----------------------------------------*/
/*
#define SPCR2_XRST 0//发送器复位
#define SPCR2_XRDY 1//发送准备好
#define SPCR2_XEMPTY 2//发送移位寄存器空
#define SPCR2_XSYNCERR 3//发生同步错误
#define SPCR2_XINTM 4//发送中断模式4~5
#define SPCR2_GRST 6//采样率发生器复位
#define SPCR2_FRST 7//帧同步发生器复位
#define SPCR2_SOFT 8//软件模式
#define SPCR2_FREE 9//自由运行模式
*/
/*---------------------------------------
SPCR2位枚举
----------------------------------------*/
enum SPCR2
{
SPCR2_XRST = 0,//发送器复位
SPCR2_XRDY = 1,//发送准备好
SPCR2_XEMPTY = 2,//发送移位寄存器空
SPCR2_XSYNCERR = 3,//发生同步错误
SPCR2_XINTM = 4,//发送中断模式4~5
SPCR2_GRST = 6,//采样率发生器复位
SPCR2_FRST = 7,//帧同步发生器复位
SPCR2_SOFT = 8,//软件模式
SPCR2_FREE = 9//自由运行模式
};
typedef volatile struct
{
TI_REG Reserved: 6;//保留位10~15
TI_REG FREE: 1;//自由运行模式9
TI_REG SOFT: 1;//软件模式8
TI_REG FRST: 1;//帧同步发生器复位7
TI_REG GRST: 1;//采样率发生器复位6
TI_REG XINTM: 2;//发送中断模式4~5
TI_REG XSYNCERR: 1;//发生同步错误3
TI_REG XEMPTY: 1;//发送移位寄存器空2
TI_REG XRDY: 1;//发送准备好好1
TI_REG XRST: 1;//发送器复位0
}TI_BITS_SPCR2, *TI_BITS_PSPCR2;
typedef volatile union
{
TI_REG Regs;
TI_BITS_SPCR2 Bits;
}TI_REG_SPCR2, *TI_REG_PSPCR2;
/*---------------------------------------
PCR位定义
----------------------------------------*/
/*
#define PCR_CLKRP 0//接收时钟极性
#define PCR_CLKXP 1//发送时钟极性
#define PCR_FSRP 2//接收帧同步脉冲极性
#define PCR_FSXP 3//发送帧同步脉冲极性
#define PCR_DR_STAT 4//DR引脚状态位
#define PCR_DX_STAT 5//DX引脚状态位
#define PCR_CLKS_STAT 6//CLKS引脚状态位
#define PCR_CLKRM 8//接收器时钟模式位
#define PCR_CLKXM 9//发送器时钟模式位
#define PCR_FSRM 10//接收帧同步模式位
#define PCR_FSXM 11//发送帧同步模式位
#define PCR_RIOEN 12//接收通用I/O模式位
#define PCR_XIOEN 13//发送通用I/O模式位
*/
/*---------------------------------------
PCR位枚举
----------------------------------------*/
enum PCR
{
PCR_CLKRP = 0,//接收时钟极性
PCR_CLKXP = 1,//发送时钟极性
PCR_FSRP = 2,//接收帧同步脉冲极性
PCR_FSXP = 3,//发送帧同步脉冲极性
PCR_DR_STAT = 4,//DR引脚状态位
PCR_DX_STAT = 5,//DX引脚状态位
PCR_CLKS_STAT = 6,//CLKS引脚状态位
PCR_CLKRM = 8,//接收器时钟模式位
PCR_CLKXM = 9,//发送器时钟模式位
PCR_FSRM = 10,//接收帧同步模式位
PCR_FSXM = 11,//发送帧同步模式位
PCR_RIOEN = 12,//接收通用I/O模式位
PCR_XIOEN = 13//发送通用I/O模式位
};
typedef volatile struct
{
TI_REG Reserved0: 2;//保留位14~15
TI_REG XIOEN: 1;//发送通用I/O模式位13
TI_REG RIOEN: 1;//接收通用I/O模式位12
TI_REG FSXM: 1;//发送帧同步模式位11
TI_REG FSRM: 1;//接收帧同步模式位10
TI_REG CLKXM: 1;//发送器时钟模式位9
TI_REG CLKRM: 1;//接收器时钟模式位8
TI_REG Reserved1: 1;//保留位7
TI_REG CLKS_STAT: 1;//CLKS引脚状态位6
TI_REG DX_STAT: 1;//DX引脚状态位5
TI_REG DR_STAT: 1;//DR引脚状态位4
TI_REG FSXP: 1;//发送帧同步脉冲极性3
TI_REG FSRP: 1;//接收帧同步脉冲极性2
TI_REG CLKXP: 1;//发送时钟极性1
TI_REG CLKRP: 1;//接收时钟极性0
}TI_BITS_PCR, *TI_BITS_PPCR;
typedef volatile union
{
TI_REG Regs;
TI_BITS_PCR Bits;
}TI_REG_PCR, *TI_REG_PPCR;
/*---------------------------------------
RCR1位定义
----------------------------------------*/
/*
#define RCR1_RWDLEN1 5//5~7
#define RCR1_RFRLEN1 8//8~14
*/
/*---------------------------------------
RCR1位枚举
----------------------------------------*/
enum RCR1
{
RCR1_RWDLEN1 = 5,//5~7
RCR1_RFRLEN1 = 8//8~14
};
typedef volatile struct
{
TI_REG Reserved0: 1;//保留位15
TI_REG RFRLEN1: 7;//8~14
TI_REG RWDLEN1: 1;//5~7
TI_REG Reserved1: 5;//保留位0~4
}TI_BITS_RCR1, *TI_BITS_PRCR1;
typedef volatile union
{
TI_REG Regs;
TI_BITS_RCR1 Bits;
}TI_REG_RCR1, *TI_REG_PRCR1;
/*---------------------------------------
RCR2位定义
----------------------------------------*/
/*
#define RCR2_RDATDLY 0//0~1
#define RCR2_RFIG 2//
#define RCR2_RCOMPAND 3//3~4
#define RCR2_RWDLEN2 5//5~6
#define RCR2_RFRLEN2 8//8~14
#define RCR2_RPHASE 15//接收相位
*/
/*---------------------------------------
RCR2位枚举
----------------------------------------*/
enum RCR2
{
RCR2_RDATDLY = 0,//0~1
RCR2_RFIG = 2,//
RCR2_RCOMPAND = 3,//3~4
RCR2_RWDLEN2 = 5,//5~6
RCR2_RFRLEN2 = 8,//8~14
RCR2_RPHASE = 15//接收相位
};
typedef volatile struct
{
TI_REG RPHASE: 1;//接收相位15
TI_REG RFRLEN2: 7;//8~14
TI_REG Reserved: 1;//保留位7
TI_REG RWDLEN2: 2;//5~6
TI_REG RCOMPAND: 2;//3~4
TI_REG RFIG: 1;//2
TI_REG RDATDLY: 2;//接收数据延迟位0~1
}TI_BITS_RCR2, *TI_BITS_PRCR2;
typedef volatile union
{
TI_REG Regs;
TI_BITS_RCR2 Bits;
}TI_REG_RCR2, *TI_REG_PRCR2;
/*---------------------------------------
XCR1位定义
----------------------------------------*/
/*
#define XCR1_XWDLEN1 5//5~7 *本次修改*
#define XCR1_XFRLEN1 8//8~14 *本次修改*
*/
/*---------------------------------------
XCR1位枚举
----------------------------------------*/
enum XCR1
{
XCR1_XWDLEN1 = 5,//5~7 *本次修改*
XCR1_XFRLEN1 = 8//8~14 *本次修改*
};
typedef volatile struct
{
TI_REG Reserved0: 1;//保留位15
TI_REG XFRLEN1: 7;//8~14
TI_REG XWDLEN1: 1;//5~7
TI_REG Reserved1: 5;//保留位0~4
}TI_BITS_XCR1, *TI_BITS_PXCR1;
typedef volatile union
{
TI_REG Regs;
TI_BITS_XCR1 Bits;
}TI_REG_XCR1, *TI_REG_PXCR1;
/*---------------------------------------
XCR2位定义
----------------------------------------*/
/*
#define XCR2_XDATDLY 0//0~1
#define XCR2_XFIG 2//
#define XCR2_XCOMPAND 3//3~4
#define XCR2_XWDLEN2 5//5~6
#define XCR2_XFRLEN2 8//8~14
#define XCR2_XPHASE 15//发送相位
*/
/*---------------------------------------
XCR2位枚举
----------------------------------------*/
enum XCR2
{
XCR2_XDATDLY = 0,//0~1
XCR2_XFIG = 2,//
XCR2_XCOMPAND = 3,//3~4
XCR2_XWDLEN2 = 5,//5~6
XCR2_XFRLEN2 = 8,//8~14
XCR2_XPHASE = 15//发送相位
};
typedef volatile struct
{
TI_REG XPHASE: 1;//发送相位15
TI_REG XFRLEN2: 7;//8~14
TI_REG Reserved: 1;//保留位7
TI_REG XWDLEN2: 2;//5~6
TI_REG XCOMPAND: 2;//3~4
TI_REG XFIG: 1;//2
TI_REG XDATDLY: 2;//发送数据延迟位0~1
}TI_BITS_XCR2, *TI_BITS_PXCR2;
typedef volatile union
{
TI_REG Regs;
TI_BITS_XCR2 Bits;
}TI_REG_XCR2, *TI_REG_PXCR2;
/*---------------------------------------
SRGR1位定义
----------------------------------------*/
/*
#define SRGR1_CLKGDV 0//0~7
#define SRGR1_FWID 8//8~15
*/
/*---------------------------------------
SRGR1位枚举
----------------------------------------*/
enum SRGR1
{
SRGR1_CLKGDV = 0,//0~7
SRGR1_FWID = 8//8~15
};
typedef volatile struct
{
TI_REG FWID: 8;//8~15
TI_REG CLKGDV: 8;//0~7
}TI_BITS_SRGR1, *TI_BITS_PSRGR1;
typedef volatile union
{
TI_REG Regs;
TI_BITS_SRGR1 Bits;
}TI_REG_SRGR1, *TI_REG_PSRGR1;
/*---------------------------------------
SRGR2位定义
----------------------------------------*/
/*
#define SRGR2_FPER 0//0~11//修正处
#define SRGR2_FSGM 12//
#define SRGR2_CLKSM 13//
#define SRGR2_CLKSP 14//
#define SRGR2_GSYNC 15//
*/
/*---------------------------------------
SRGR2位枚举
----------------------------------------*/
enum SRGR2
{
SRGR2_FPER = 0,//0~11//修正处
SRGR2_FSGM = 12,//
SRGR2_CLKSM = 13,//
SRGR2_CLKSP = 14,//
SRGR2_GSYNC = 15//
};
typedef volatile struct
{
TI_REG GSYNC: 1;//15
TI_REG CLKSP: 1;//14
TI_REG CLKSM: 1;//13
TI_REG FSGM: 1;//12
TI_REG FPER: 12;//0~11//修正处
}TI_BITS_SRGR2, *TI_BITS_PSRGR2;
typedef volatile union
{
TI_REG Regs;
TI_BITS_SRGR2 Bits;
}TI_REG_SRGR2, *TI_REG_PSRGR2;
/*---------------------------------------
MCR1位定义
----------------------------------------*/
/*
#define MCR1_RMCM 0//0
#define MCR1_RCBLK 2//2~4
#define MCR1_RPABLK 5//5~6
#define MCR1_RPBBLK 7//7~8
*/
/*---------------------------------------
MCR1位枚举
----------------------------------------*/
enum MCR1
{
MCR1_RMCM = 0,//0
MCR1_RCBLK = 2,//2~4
MCR1_RPABLK = 5,//5~6
MCR1_RPBBLK = 7//7~8
};
typedef volatile struct
{
TI_REG Reserved0: 7;//9~15
TI_REG RPBBLK: 2;//7~8
TI_REG RPABLK: 2;//5~6
TI_REG RCBLK: 3;//2~4
TI_REG Reserved1: 1;//3
TI_REG RMCM: 1;//0
}TI_BITS_MCR1, *TI_BITS_PMCR1;
typedef volatile union
{
TI_REG Regs;
TI_BITS_MCR1 Bits;
}TI_REG_MCR1, *TI_REG_PMCR1;
/*---------------------------------------
MCR2位定义
----------------------------------------*/
/*
#define MCR2_XMCM 0//0~1
#define MCR2_XCBLK 2//2~4
#define MCR2_XPABLK 5//5~6
#define MCR2_XPBBLK 7//7~8
*/
/*---------------------------------------
MCR2位枚举
----------------------------------------*/
enum MCR2
{
MCR2_XMCM = 0,//0~1
MCR2_XCBLK = 2,//2~4
MCR2_XPABLK = 5,//5~6
MCR2_XPBBLK = 7//7~8
};
typedef volatile struct
{
TI_REG Reserved0: 7;//9~15
TI_REG XPBBLK: 2;//7~8
TI_REG XPABLK: 2;//5~6
TI_REG XCBLK: 3;//2~4
TI_REG Reserved1: 1;//3
TI_REG XMCM: 1;//0
}TI_BITS_MCR2, *TI_BITS_PMCR2;
typedef volatile union
{
TI_REG Regs;
TI_BITS_MCR2 Bits;
}TI_REG_MCR2, *TI_REG_PMCR2;
/*---------------------------------------
RCERA位定义
----------------------------------------*/
/*
#define RCERA_0 0
#define RCERA_1 1
#define RCERA_2 2
#define RCERA_3 3
#define RCERA_4 4
#define RCERA_5 5
#define RCERA_6 6
#define RCERA_7 7
#define RCERA_8 8
#define RCERA_9 9
#define RCERA_10 10
#define RCERA_11 11
#define RCERA_12 12
#define RCERA_13 13
#define RCERA_14 14
#define RCERA_15 15
*/
/*---------------------------------------
RCERA位枚举
----------------------------------------*/
enum RCERA
{
RCERA_0 = 0,
RCERA_1 = 1,
RCERA_2 = 2,
RCERA_3 = 3,
RCERA_4 = 4,
RCERA_5 = 5,
RCERA_6 = 6,
RCERA_7 = 7,
RCERA_8 = 8,
RCERA_9 = 9,
RCERA_10 = 10,
RCERA_11 = 11,
RCERA_12 = 12,
RCERA_13 = 13,
RCERA_14 = 14,
RCERA_15 = 15
};
/*
typedef volatile struct
{
TI_REG RCERA_15: 1;//15
TI_REG RCERA_14: 1;//14
TI_REG RCERA_13: 1;//13
TI_REG RCERA_12: 1;//12
TI_REG RCERA_11: 1;//11
TI_REG RCERA_10: 1;//10
TI_REG RCERA_9: 1;//9
TI_REG RCERA_8: 1;//8
TI_REG RCERA_7: 1;//7
TI_REG RCERA_6: 1;//6
TI_REG RCERA_5: 1;//5
TI_REG RCERA_4: 1;//4
TI_REG RCERA_3: 1;//3
TI_REG RCERA_2: 1;//2
TI_REG RCERA_1: 1;//1
TI_REG RCERA_0: 1;//0
}TI_BITS_RCERA, *TI_BITS_PRCERA;
typedef volatile union
{
TI_REG Regs;
TI_BITS_PRCERA Bits;
}TI_REG_RCERA, *TI_REG_PRCERA;
*/
/*---------------------------------------
RCERB位定义
----------------------------------------*/
/*
#define RCERB_0 0
#define RCERB_1 1
#define RCERB_2 2
#define RCERB_3 3
#define RCERB_4 4
#define RCERB_5 5
#define RCERB_6 6
#define RCERB_7 7
#define RCERB_8 8
#define RCERB_9 9
#define RCERB_10 10
#define RCERB_11 11
#define RCERB_12 12
#define RCERB_13 13
#define RCERB_14 14
#define RCERB_15 15
*/
/*---------------------------------------
RCERB位枚举
----------------------------------------*/
enum RCERB
{
RCERB_0 = 0,
RCERB_1 = 1,
RCERB_2 = 2,
RCERB_3 = 3,
RCERB_4 = 4,
RCERB_5 = 5,
RCERB_6 = 6,
RCERB_7 = 7,
RCERB_8 = 8,
RCERB_9 = 9,
RCERB_10 = 10,
RCERB_11 = 11,
RCERB_12 = 12,
RCERB_13 = 13,
RCERB_14 = 14,
RCERB_15 = 15
};
/*
typedef volatile struct
{
TI_REG RCERB_15: 1;//15
TI_REG RCERB_14: 1;//14
TI_REG RCERB_13: 1;//13
TI_REG RCERB_12: 1;//12
TI_REG RCERB_11: 1;//11
TI_REG RCERB_10: 1;//10
TI_REG RCERB_9: 1;//9
TI_REG RCERB_8: 1;//8
TI_REG RCERB_7: 1;//7
TI_REG RCERB_6: 1;//6
TI_REG RCERB_5: 1;//5
TI_REG RCERB_4: 1;//4
TI_REG RCERB_3: 1;//3
TI_REG RCERB_2: 1;//2
TI_REG RCERB_1: 1;//1
TI_REG RCERB_0: 1;//0
}TI_BITS_RCERB, *TI_BITS_PRCERB;
typedef volatile union
{
TI_REG Regs;
TI_BITS_PRCERB Bits;
}TI_REG_RCERB, *TI_REG_PRCERB;
*/
/*---------------------------------------
XCERA位定义
----------------------------------------*/
/*
#define XCERA_0 0
#define XCERA_1 1
#define XCERA_2 2
#define XCERA_3 3
#define XCERA_4 4
#define XCERA_5 5
#define XCERA_6 6
#define XCERA_7 7
#define XCERA_8 8
#define XCERA_9 9
#define XCERA_10 10
#define XCERA_11 11
#define XCERA_12 12
#define XCERA_13 13
#define XCERA_14 14
#define XCERA_15 15
*/
/*---------------------------------------
XCERA位枚举
----------------------------------------*/
enum XCERA
{
XCERA_0 = 0,
XCERA_1 = 1,
XCERA_2 = 2,
XCERA_3 = 3,
XCERA_4 = 4,
XCERA_5 = 5,
XCERA_6 = 6,
XCERA_7 = 7,
XCERA_8 = 8,
XCERA_9 = 9,
XCERA_10 =10,
XCERA_11 =11,
XCERA_12 =12,
XCERA_13 =13,
XCERA_14 =14,
XCERA_15 =15
};
//#define TI_REG_XCERA TI_REG_BASE
/*---------------------------------------
XCERB位定义
----------------------------------------*/
/*
#define XCERB_0 0
#define XCERB_1 1
#define XCERB_2 2
#define XCERB_3 3
#define XCERB_4 4
#define XCERB_5 5
#define XCERB_6 6
#define XCERB_7 7
#define XCERB_8 8
#define XCERB_9 9
#define XCERB_10 10
#define XCERB_11 11
#define XCERB_12 12
#define XCERB_13 13
#define XCERB_14 14
#define XCERB_15 15
*/
/*---------------------------------------
XCERB位枚举
----------------------------------------*/
enum XCERB
{
XCERB_0 = 0,
XCERB_1 = 1,
XCERB_2 = 2,
XCERB_3 = 3,
XCERB_4 = 4,
XCERB_5 = 5,
XCERB_6 = 6,
XCERB_7 = 7,
XCERB_8 = 8,
XCERB_9 = 9,
XCERB_10 = 10,
XCERB_11 = 11,
XCERB_12 = 12,
XCERB_13 = 13,
XCERB_14 = 14,
XCERB_15 = 15
};
//#define TI_REG_XCERB TI_REG_BASE
/*---------------------------------------
子McBSP地址定义
----------------------------------------*/
/*
#define SPCR1 0x00;//串行接口控制寄存器1
#define SPCR2 0x01;//串行接口控制寄存器2
#define RCR1 0x02;//接收控制寄存器1
#define RCR2 0x03;//接收控制寄存器2
#define XCR1 0x04;//发送控制寄存器1
#define XCR2 0x05;//发送控制寄存器2
#define SRGR1 0x06;//采样率发生器寄存器1
#define SRGR2 0x07;//采样率发生器寄存器2
#define MCR1 0x08;//多通道寄存器1
#define MCR2 0x09;//多通道寄存器2
#define RCERA 0x0a;//接收通道使能寄存器段A
#define RCERB 0x0b;//接收通道使能寄存器段B
#define XCERA 0x0c;//发送通道使能寄存器段A
#define XCERB 0x0d;//发送通道使能寄存器段B
#define PCR 0x0e;//引脚控制寄存器
*/
/*---------------------------------------
子McBSP地址枚举
----------------------------------------*/
enum SPSA
{
SPCR1 = 0x00,//串行接口控制寄存器1
SPCR2 = 0x01,//串行接口控制寄存器2
RCR1 = 0x02,//接收控制寄存器1
RCR2 = 0x03,//接收控制寄存器2
XCR1 = 0x04,//发送控制寄存器1
XCR2 = 0x05,//发送控制寄存器2
SRGR1 = 0x06,//采样率发生器寄存器1
SRGR2 = 0x07,//采样率发生器寄存器2
MCR1 = 0x08,//多通道寄存器1
MCR2 = 0x09,//多通道寄存器2
RCERA = 0x0a,//接收通道使能寄存器段A
RCERB = 0x0b,//接收通道使能寄存器段B
XCERA = 0x0c,//发送通道使能寄存器段A
XCERB = 0x0d,//发送通道使能寄存器段B
PCR = 0x0e//引脚控制寄存器
};
/*---------------------------------------*/
// MCBSP虚拟位寻址
/*---------------------------------------*/
typedef volatile union
{
TI_REG Regs;
TI_REG SPCR1_Regs;
TI_BITS_SPCR1 SPCR1_Bits;
TI_REG SPCR2_Regs;
TI_BITS_SPCR2 SPCR2_Bits;
TI_REG RCR1_Regs;
TI_BITS_RCR1 RCR1_Bits;
TI_REG RCR2_Regs;
TI_BITS_RCR2 RCR2_Bits;
TI_REG XCR1_Regs;
TI_BITS_XCR1 XCR1_Bits;
TI_REG XCR2_Regs;
TI_BITS_XCR2 XCR2_Bits;
TI_REG SRGR1_Regs;
TI_BITS_SRGR1 SRGR1_Bits;
TI_REG SRGR2_Regs;
TI_BITS_SRGR2 SRGR2_Bits;
TI_REG MCR1_Regs;
TI_BITS_MCR1 MCR1_Bits;
TI_REG MCR2_Regs;
TI_BITS_MCR2 MCR2_Bits;
TI_REG RCERA_Regs;
TI_REG RCERB_Regs;
TI_REG XCERA_Regs;
TI_REG XCERB_Regs;
TI_REG PCR_Regs;
TI_BITS_PCR PCR_Bits;
}TI_REG_SPSD, *TI_REG_PSPSD;
/*---------------------------------------*/
typedef volatile struct _TI_McBSPData {
TI_REG DRR2;//数据接收寄存器2
TI_REG DRR1;//数据接收寄存器1
TI_REG DXR2;//数据发送寄存器2
TI_REG DXR1;//数据发送寄存器1
}TI_McBSPDATA, *TI_PMcBSPDATA;
typedef volatile struct _TI_McBSPAddr {
TI_REG SPSA;//子区寻址寄存器
TI_REG_SPSD SPSD;//子区数据寄存器
}TI_McBSPADDR, *TI_PMcBSPADDR;
typedef volatile struct _TI_McBSP0 {
TI_REG DRR2;//数据接收寄存器2(0x20)
TI_REG DRR1;//数据接收寄存器1(0x21)
TI_REG DXR2;//数据发送寄存器2(0x22)
TI_REG DXR1;//数据发送寄存器1(0x23)
TI_REG Reserved[20]; //保留20个空位
TI_REG SPSA;//子区寻址寄存器(0x38)
TI_REG_SPSD SPSD;//子区数据寄存器(0x39)
}TI_McBSP0, *TI_PMcBSP0;
#define TI_BASE_McBSP0 ((TI_McBSP0 *) 0x0020)//定义硬件结构指针(硬件地址)
typedef volatile struct _TI_McBSP1 {
TI_REG DRR2;//数据接收寄存器2(0x40)
TI_REG DRR1;//数据接收寄存器1(0x41)
TI_REG DXR2;//数据发送寄存器2(0x42)
TI_REG DXR1;//数据发送寄存器1(0x43)
TI_REG Reserved[4]; //保留4个空位
TI_REG SPSA;//子区寻址寄存器(0x48)
TI_REG_SPSD SPSD;//子区数据寄存器(0x49)
}TI_McBSP1, *TI_PMcBSP1;
#define TI_BASE_McBSP1 ((TI_McBSP1 *) 0x0040)//定义硬件结构指针(硬件地址)
/*--------------------------------------------------------------------------
应用举例:
间接访问(结构指针)
McBSP0->DXR1 = 0xaa;//向串口0数据发送寄存器1发送数据0xaa
McBSP0->SPSA = SPCR1;//设置子地址SPCR1
McBSP0->SPSD.SPCR1_Bits.RJUST = 1;//设置子地址SPCR1的数据位RJUST
物理直接访问(结构)
SREGs.McBSPDATA0.DXR1 = 0xaa;//向串口0数据发送寄存器1发送数据0xaa
SREGs.McBSPADDR0.SPSA = SPCR1;//设置子地址SPCR1
SREGs.McBSPADDR0.SPSD0.SPCR1_Bits.RJUST = 1;//设置子地址SPCR1的数据位RJUST
---------------------------------------------------------------------------*/
/*---------------------------------------
子DMA地址定义
----------------------------------------*/
/*
#define DMSRC0 0x00;//DMA通道0源地址寄存器
#define DMDST0 0x01;//DMA通道0目的地址寄存器
#define DMCTR0 0x02;//DMA通道0单元计数寄存器
#define DMSFC0 0x03;//DMA通道0同步事件和帧寄存器
#define DMMCR0 0x04;//DMA通道0传输模式控制寄存器
#define DMSRC1 0x05;//DMA通道1源地址寄存器
#define DMDST1 0x06;//DMA通道1目的地址寄存器
#define DMCTR1 0x07;//DMA通道1单元计数寄存器
#define DMSFC1 0x08;//DMA通道1同步事件和帧寄存器
#define DMMCR1 0x09;//DMA通道1传输模式控制寄存器
#define DMSRC2 0x0a;//DMA通道2源地址寄存器
#define DMDST2 0x0b;//DMA通道2目的地址寄存器
#define DMCTR2 0x0c;//DMA通道2单元计数寄存器
#define DMSFC2 0x0d;//DMA通道2同步事件和帧寄存器
#define DMMCR2 0x0e;//DMA通道2传输模式控制寄存器
#define DMSRC3 0x0f;//DMA通道3源地址寄存器
#define DMDST3 0x10;//DMA通道3目的地址寄存器
#define DMCTR3 0x11;//DMA通道3单元计数寄存器
#define DMSFC3 0x12;//DMA通道3同步事件和帧寄存器
#define DMMCR3 0x13;//DMA通道3传输模式控制寄存器
#define DMSRC4 0x14;//DMA通道4源地址寄存器
#define DMDST4 0x15;//DMA通道4目的地址寄存器
#define DMCTR4 0x16;//DMA通道4单元计数寄存器
#define DMSFC4 0x17;//DMA通道4同步事件和帧寄存器
#define DMMCR4 0x18;//DMA通道4传输模式控制寄存器
#define DMSRC5 0x19;//DMA通道5源地址寄存器
#define DMDST5 0x1a;//DMA通道5目的地址寄存器
#define DMCTR5 0x1b;//DMA通道5寄存器
#define DMSFC5 0x1c;//DMA通道5同步事件和帧寄存器
#define DMMCR5 0x1d;//DMA通道5传输模式控制寄存器
#define DMSRCP 0x1e;//DMA源程序页地址(公用的通道)
#define DMDSTP 0x1f;//DMA目的程序页地址(公用的通道)
#define DMIDX0 0x20;//DMA单元变址寄存器0
#define DMIDX1 0x21;//DMA单元变址寄存器1
#define DMFRI0 0x22;//DMA帧变址寄存器0
#define DMFRI1 0x23;//DMA帧变址寄存器1
#define DMGSA 0x24;//DMA全局源地址重载寄存器
#define DMGDA 0x25;//DMA全局目的地址重载寄存器
#define DMGCR 0x26;//DMA全局计数重载寄存器
#define DMGFR 0x27;//DMA全局帧计数重载寄存器
*/
/*---------------------------------------
子DMA地址枚举
----------------------------------------*/
enum DMSA
{
DMSRC0 = 0x00,//DMA通道0源地址寄存器
DMDST0 = 0x01,//DMA通道0目的地址寄存器
DMCTR0 = 0x02,//DMA通道0单元计数寄存器
DMSFC0 = 0x03,//DMA通道0同步事件和帧寄存器
DMMCR0 = 0x04,//DMA通道0传输模式控制寄存器
DMSRC1 = 0x05,//DMA通道1源地址寄存器
DMDST1 = 0x06,//DMA通道1目的地址寄存器
DMCTR1 = 0x07,//DMA通道1单元计数寄存器
DMSFC1 = 0x08,//DMA通道1同步事件和帧寄存器
DMMCR1 = 0x09,//DMA通道1传输模式控制寄存器
DMSRC2 = 0x0a,//DMA通道2源地址寄存器
DMDST2 = 0x0b,//DMA通道2目的地址寄存器
DMCTR2 = 0x0c,//DMA通道2单元计数寄存器
DMSFC2 = 0x0d,//DMA通道2同步事件和帧寄存器
DMMCR2 = 0x0e,//DMA通道2传输模式控制寄存器
DMSRC3 = 0x0f,//DMA通道3源地址寄存器
DMDST3 = 0x10,//DMA通道3目的地址寄存器
DMCTR3 = 0x11,//DMA通道3单元计数寄存器
DMSFC3 = 0x12,//DMA通道3同步事件和帧寄存器
DMMCR3 = 0x13,//DMA通道3传输模式控制寄存器
DMSRC4 = 0x14,//DMA通道4源地址寄存器
DMDST4 = 0x15,//DMA通道4目的地址寄存器
DMCTR4 = 0x16,//DMA通道4单元计数寄存器
DMSFC4 = 0x17,//DMA通道4同步事件和帧寄存器
DMMCR4 = 0x18,//DMA通道4传输模式控制寄存器
DMSRC5 = 0x19,//DMA通道5源地址寄存器
DMDST5 = 0x1a,//DMA通道5目的地址寄存器
DMCTR5 = 0x1b,//DMA通道5寄存器
DMSFC5 = 0x1c,//DMA通道5同步事件和帧寄存器
DMMCR5 = 0x1d,//DMA通道5传输模式控制寄存器
DMSRCP = 0x1e,//DMA源程序页地址(公用的通道)
DMDSTP = 0x1f,//DMA目的程序页地址(公用的通道)
DMIDX0 = 0x20,//DMA单元变址寄存器0
DMIDX1 = 0x21,//DMA单元变址寄存器1
DMFRI0 = 0x22,//DMA帧变址寄存器0
DMFRI1 = 0x23,//DMA帧变址寄存器1
DMGSA = 0x24,//DMA全局源地址重载寄存器
DMGDA = 0x25,//DMA全局目的地址重载寄存器
DMGCR = 0x26,//DMA全局计数重载寄存器
DMGFR = 0x27 //DMA全局帧计数重载寄存器
};
/*---------------------------------------
DMSFC位定义
----------------------------------------*/
/*
#define DMSFC_FRAMECNT 0//DMA帧计数位0~7
#define DMSFC_DBLW 11//DMA双字模式位11
#define DMSFC_DBLW_WORD 0//DMA单字模式
#define DMSFC_DBLW_DWORD 1//DMA双字模式
#define DMSFC_DSYN 12//DMA同步事件位12~15
#define DMSFC_DSYN_NONE 0//无DMA事件
#define DMSFC_DSYN_REVT0 1//McBSP0接收事件
#define DMSFC_DSYN_XEVT0 2//McBSP0发送事件
#define DMSFC_DSYN_REVT1 5//McBSP1接收事件
#define DMSFC_DSYN_XEVT1 6//McBSP1发送事件
#define DMSFC_DSYN_TINT0 13//Timer0中断事件
#define DMSFC_DSYN_TINT1 15//Timer1中断事件
#define DMSFC_DSYN_INT3 14//EInt3中断事件
*/
/*---------------------------------------
DMSFC_DBLW位域枚举
----------------------------------------*/
enum DMSFC_DBLW
{
DBLW_WORD = 0,//DMA单字模式
DBLW_DWORD = 1//DMA双字模式
};
/*---------------------------------------
DMSFC_DSYN位域枚举
----------------------------------------*/
enum DMSFC_DSYN
{
DSYN_NONE = 0,//无DMA事件
DSYN_REVT0 = 1,//McBSP0接收事件
DSYN_XEVT0 = 2,//McBSP0发送事件
DSYN_REVT1 = 5,//McBSP1接收事件
DSYN_XEVT1 = 6,//McBSP1发送事件
DSYN_TINT0 = 13,//Timer0中断事件
DSYN_TINT1 = 15,//Timer1中断事件
DSYN_INT3 = 14//EInt3中断事件
};
/*---------------------------------------
DMSFC位枚举
----------------------------------------*/
enum DMSFC
{
DMSFC_FRAMECNT = 0,//DMA帧计数位0~7
DMSFC_DBLW = 11,//DMA双字模式位11
/*
DMSFC_DBLW_WORD = 0,//DMA单字模式
DMSFC_DBLW_DWORD = 1,//DMA双字模式
*/
DMSFC_DSYN = 12//DMA同步事件位12~15
/*
DMSFC_DSYN_NONE = 0,//无DMA事件
DMSFC_DSYN_REVT0 = 1,//McBSP0接收事件
DMSFC_DSYN_XEVT0 = 2,//McBSP0发送事件
DMSFC_DSYN_REVT1 = 5,//McBSP1接收事件
DMSFC_DSYN_XEVT1 = 6,//McBSP1发送事件
DMSFC_DSYN_TINT0 = 13,//Timer0中断事件
DMSFC_DSYN_TINT1 = 15,//Timer1中断事件
DMSFC_DSYN_INT3 = 14//EInt3中断事件
*/
};
typedef volatile struct
{
TI_REG DSYN: 4;//DMA同步事件位12~15
TI_REG DBLW: 1;//DMA双字模式位11
TI_REG Reserved: 3;//保留位8~10
TI_REG FRAMECNT: 8;//DMA帧计数位0~7
}TI_BITS_DMSFC, *TI_BITS_PDMSFC;
/*---------------------------------------
DMMCR位定义
----------------------------------------*/
/*
#define DMMCR_DMD 0//DMA目的地址空间选择位 0~1
#define DMMCR_DMD_PROGRAM 0//选择程序区
#define DMMCR_DMD_DATA 1//选择数据区
#define DMMCR_DMD_IO 2//选择IO区
#define DMMCR_DIND 2//DMA目的地址传输偏置量模式位 2~4
#define DMMCR_DIND_NOMOD 0//操作后目的地址
#define DMMCR_DIND_POSTINC 1//操作后目的地址增加1
#define DMMCR_DIND_POSTDEC 2//操作后目的地址减少1
#define DMMCR_DIND_DMIDX0 3//
#define DMMCR_DIND_DMIDX1 4//
#define DMMCR_DIND_DMFRI0 5//
#define DMMCR_DIND_DMFRI1 6//
#define DMMCR_DMS 6//DMA源地址空间选择位 6~7
#define DMMCR_DMS_PROGRAM 0//选择程序区
#define DMMCR_DMS_DATA 1//选择数据区
#define DMMCR_DMS_IO 2//选择IO区
#define DMMCR_SIND 8//DMA源地址传输偏置量模式位 8~10
#define DMMCR_SIND_NOMOD 0//
#define DMMCR_SIND_POSTINC 1//
#define DMMCR_SIND_POSTDEC 2//
#define DMMCR_SIND_DMIDX0 3//
#define DMMCR_SIND_DMIDX1 4//
#define DMMCR_SIND_DMFRI0 5//
#define DMMCR_SIND_DMFRI1 6//
#define DMMCR_CTMOD 12//DMA传输计数器模式控制位 12
#define DMMCR_CTMOD_MULTIFRAME 0//
#define DMMCR_CTMOD_ABU 1//
#define DMMCR_IMOD 13//DMA中断产生模式位 13
#define DMMCR_IMOD_OFF 0//(CTMOD=1)仅在缓冲区满时产生中断
#define DMMCR_IMOD_ON 1//(CTMOD=1)在缓冲区满或半满时产生中断
#define DMMCR_DINM 14//DMA中断产生屏蔽位 14
#define DMMCR_DINM_OFF 0//不产生中断
#define DMMCR_DINM_ON 1//基于IMOD位产生中断
#define DMMCR_AUTOINIT 15//DMA自动初始化模式位 15
#define DMMCR_AUTOINIT_OFF 0//禁止自动初始化
#define DMMCR_AUTOINIT_ON 1//自动初始化使能
*/
/*---------------------------------------
DMMCR_DMD位域枚举
----------------------------------------*/
enum DMMCR_DMD
{
DMD_PROGRAM = 0,//选择目的程序区
DMD_DATA = 1,//选择目的数据区
DMD_IO = 2//选择目的IO区
};
/*---------------------------------------
DMMCR_DIND位域枚举
----------------------------------------*/
enum DMMCR_DIND
{
DIND_NOMOD = 0,//操作后目的地址不变
DIND_POSTINC = 1,//操作后目的地址增加1
DIND_POSTDEC = 2,//操作后目的地址减少1
DIND_DMIDX0 = 3,//
DIND_DMIDX1 = 4,//
DIND_DMFRI0 = 5,//
DIND_DMFRI1 = 6//
};
/*---------------------------------------
DMMCR_DMS位域枚举
----------------------------------------*/
enum DMMCR_DMS
{
DMS_PROGRAM = 0,//选择源程序区
DMS_DATA = 1,//选择源数据区
DMS_IO = 2//选择源IO区
};
/*---------------------------------------
DMMCR_SIND位域枚举
----------------------------------------*/
enum DMMCR_SIND
{
SIND_NOMOD = 0,//操作后源地址不变
SIND_POSTINC = 1,//操作后源地址增加1
SIND_POSTDEC = 2,//操作后源地址减少1
SIND_DMIDX0 = 3,//
SIND_DMIDX1 = 4,//
SIND_DMFRI0 = 5,//
SIND_DMFRI1 = 6//
};
/*---------------------------------------
DMMCR_CTMOD位域枚举
----------------------------------------*/
enum DMMCR_CTMOD
{
CTMOD_MULTIFRAME = 0,//
CTMOD_ABU = 1//
};
/*---------------------------------------
DMMCR_IMOD位域枚举
----------------------------------------*/
enum DMMCR_IMOD
{
IMOD_OFF = 0,//(CTMOD=1)仅在缓冲区满时产生中断
IMOD_ON = 1//(CTMOD=1)在缓冲区满或半满时产生中断
};
/*---------------------------------------
DMMCR_DINM位域枚举
----------------------------------------*/
enum DMMCR_DINM
{
DINM_OFF = 0,//不产生中断
DINM_ON = 1//基于IMOD位产生中断
};
/*---------------------------------------
DMMCR_AUTOINIT位域枚举
----------------------------------------*/
enum DMMCR_AUTOINIT
{
AUTOINIT_OFF = 0,//禁止自动初始化
AUTOINIT_ON = 1//自动初始化使能
};
/*---------------------------------------
DMMCR位枚举
----------------------------------------*/
enum DMMCR
{
DMMCR_DMD = 0,//DMA目的地址空间选择位 0~1
/*
DMMCR_DMD_PROGRAM = 0,//选择程序区
DMMCR_DMD_DATA = 1,//选择数据区
DMMCR_DMD_IO = 2,//选择IO区
*/
DMMCR_DIND = 2,//DMA目的地址传输偏置量模式位 2~4
/*
DMMCR_DIND_NOMOD = 0,//操作后目的地址
DMMCR_DIND_POSTINC = 1,//操作后目的地址增加1
DMMCR_DIND_POSTDEC = 2,//操作后目的地址减少1
DMMCR_DIND_DMIDX0 = 3,//
DMMCR_DIND_DMIDX1 = 4,//
DMMCR_DIND_DMFRI0 = 5,//
DMMCR_DIND_DMFRI1 = 6,//
*/
DMMCR_DMS = 6,//DMA源地址空间选择位 6~7
/*
DMMCR_DMS_PROGRAM = 0,//选择程序区
DMMCR_DMS_DATA = 1,//选择数据区
DMMCR_DMS_IO = 2,//选择IO区
*/
DMMCR_SIND = 8,//DMA源地址传输偏置量模式位 8~10
/*
DMMCR_SIND_NOMOD = 0,//
DMMCR_SIND_POSTINC = 1,//
DMMCR_SIND_POSTDEC = 2,//
DMMCR_SIND_DMIDX0 = 3,//
DMMCR_SIND_DMIDX1 = 4,//
DMMCR_SIND_DMFRI0 = 5,//
DMMCR_SIND_DMFRI1 = 6,//
*/
DMMCR_CTMOD = 12,//DMA传输计数器模式控制位 12
/*
DMMCR_CTMOD_MULTIFRAME = 0,//
DMMCR_CTMOD_ABU = 1,//
*/
DMMCR_IMOD = 13,//DMA中断产生模式位 13
/*
DMMCR_IMOD_OFF = 0,//(CTMOD=1)仅在缓冲区满时产生中断
DMMCR_IMOD_ON = 1,//(CTMOD=1)在缓冲区满或半满时产生中断
*/
DMMCR_DINM = 14,//DMA中断产生屏蔽位 14
/*
DMMCR_DINM_OFF = 0,//不产生中断
DMMCR_DINM_ON = 1,//基于IMOD位产生中断
*/
DMMCR_AUTOINIT = 15//DMA自动初始化模式位 15
/*
DMMCR_AUTOINIT_OFF = 0,//禁止自动初始化
DMMCR_AUTOINIT_ON = 1//自动初始化使能
*/
};
typedef volatile struct
{
TI_REG AUTOINIT: 1;//DMA自动初始化模式位15
TI_REG DINM: 1;//DMA中断产生屏蔽位14
TI_REG IMOD: 1;//DMA中断产生模式位13
TI_REG CTMOD: 1;//DMA传输计数器模式控制位12
TI_REG Reserved0: 1;//保留位11
TI_REG SIND: 3;//DMA源地址传输偏置量模式位8~10
TI_REG DMS: 2;//DMA源地址空间选择位6~7
TI_REG Reserved1: 1;//保留位5
TI_REG DIND: 2;//DMA目的地址传输偏置量模式位2~4
TI_REG DMD: 2;//DMA目的地址空间选择位0~1
}TI_BITS_DMMCR, *TI_BITS_PDMMCR;
/*---------------------------------------*/
// DMA虚拟位寻址
/*---------------------------------------*/
typedef volatile union
{
TI_REG Regs;//DMA通道寄存器
TI_REG DMSRC_Regs;//DMA通道源地址寄存器
TI_REG DMSRC0_Regs;//DMA通道0源地址寄存器
TI_REG DMSRC1_Regs;//DMA通道1源地址寄存器
TI_REG DMSRC2_Regs;//DMA通道2源地址寄存器
TI_REG DMSRC3_Regs;//DMA通道3源地址寄存器
TI_REG DMSRC4_Regs;//DMA通道4源地址寄存器
TI_REG DMSRC5_Regs;//DMA通道5源地址寄存器
TI_REG DMDST_Regs;//DMA通道目的地址寄存器
TI_REG DMDST0_Regs;//DMA通道0目的地址寄存器
TI_REG DMDST1_Regs;//DMA通道1目的地址寄存器
TI_REG DMDST2_Regs;//DMA通道2目的地址寄存器
TI_REG DMDST3_Regs;//DMA通道3目的地址寄存器
TI_REG DMDST4_Regs;//DMA通道4目的地址寄存器
TI_REG DMDST5_Regs;//DMA通道5目的地址寄存器
TI_REG DMCTR_Regs;//DMA通道单元计数寄存器
TI_REG DMCTR0_Regs;//DMA通道0单元计数寄存器
TI_REG DMCTR1_Regs;//DMA通道1单元计数寄存器
TI_REG DMCTR2_Regs;//DMA通道2单元计数寄存器
TI_REG DMCTR3_Regs;//DMA通道3单元计数寄存器
TI_REG DMCTR4_Regs;//DMA通道4单元计数寄存器
TI_REG DMCTR5_Regs;//DMA通道5单元计数寄存器
TI_BITS_DMSFC DMSFC_Bits;//DMA通道同步事件和帧寄存器
TI_BITS_DMSFC DMSFC0_Bits;//DMA通道0同步事件和帧寄存器
TI_BITS_DMSFC DMSFC1_Bits;//DMA通道1同步事件和帧寄存器
TI_BITS_DMSFC DMSFC2_Bits;//DMA通道2同步事件和帧寄存器
TI_BITS_DMSFC DMSFC3_Bits;//DMA通道3同步事件和帧寄存器
TI_BITS_DMSFC DMSFC4_Bits;//DMA通道4同步事件和帧寄存器
TI_BITS_DMSFC DMSFC5_Bits;//DMA通道5同步事件和帧寄存器
TI_REG DMSFC_Regs;//DMA通道同步事件和帧寄存器
TI_REG DMSFC0_Regs;//DMA通道0同步事件和帧寄存器
TI_REG DMSFC1_Regs;//DMA通道1同步事件和帧寄存器
TI_REG DMSFC2_Regs;//DMA通道2同步事件和帧寄存器
TI_REG DMSFC3_Regs;//DMA通道3同步事件和帧寄存器
TI_REG DMSFC4_Regs;//DMA通道4同步事件和帧寄存器
TI_REG DMSFC5_Regs;//DMA通道5同步事件和帧寄存器
TI_BITS_DMMCR DMMCR_Bits;//DMA通道传输模式控制寄存器
TI_BITS_DMMCR DMMCR0_Bits;//DMA通道0传输模式控制寄存器
TI_BITS_DMMCR DMMCR1_Bits;//DMA通道1传输模式控制寄存器
TI_BITS_DMMCR DMMCR2_Bits;//DMA通道2传输模式控制寄存器
TI_BITS_DMMCR DMMCR3_Bits;//DMA通道3传输模式控制寄存器
TI_BITS_DMMCR DMMCR4_Bits;//DMA通道4传输模式控制寄存器
TI_BITS_DMMCR DMMCR5_Bits;//DMA通道5传输模式控制寄存器
TI_REG DMMCR_Regs;//DMA通道传输模式控制寄存器
TI_REG DMMCR0_Regs;//DMA通道0传输模式控制寄存器
TI_REG DMMCR1_Regs;//DMA通道1传输模式控制寄存器
TI_REG DMMCR2_Regs;//DMA通道2传输模式控制寄存器
TI_REG DMMCR3_Regs;//DMA通道3传输模式控制寄存器
TI_REG DMMCR4_Regs;//DMA通道4传输模式控制寄存器
TI_REG DMMCR5_Regs;//DMA通道5传输模式控制寄存器
TI_REG DMSRCP_Regs;//DMA源程序页地址(公用的通道)
TI_REG DMDSTP_Regs;//DMA目的程序页地址(公用的通道)
TI_REG DMIDX0_Regs;//DMA单元变址寄存器0
TI_REG DMIDX1_Regs;//DMA单元变址寄存器1
TI_REG DMFRI0_Regs;//DMA帧变址寄存器0
TI_REG DMFRI1_Regs;//DMA帧变址寄存器1
TI_REG DMGSA_Regs;//DMA全局源地址重载寄存器
TI_REG DMGDA_Regs;//DMA全局目的地址重载寄存器
TI_REG DMGCR_Regs;//DMA全局计数重载寄存器
TI_REG DMGFR_Regs;//DMA全局帧计数重载寄存器
}TI_REG_DMSD, *TI_REG_PDMSD;
/*---------------------------------------*/
/*---------------------------------------
DMPREC位定义
----------------------------------------*/
/*
#define DMPREC_DE 0//DMA通道使能0~5
#define DMPREC_DE0 0//DMA0通道使能
#define DMPREC_DE1 1//DMA1通道使能
#define DMPREC_DE2 2//DMA2通道使能
#define DMPREC_DE3 3//DMA3通道使能
#define DMPREC_DE4 4//DMA4通道使能
#define DMPREC_DE5 5//DMA5通道使能
#define DMPREC_INTOSEL 6//中断多路控制位6~7 (SINT7,SINT10,SINT11)
#define DMPREC_INTOSEL_NONE 0// Timer1,RINT1,XINT1
#define DMPREC_INTOSEL_CH2_CH3 1// Timer1,DMA2, DMA3
#define DMPREC_INTOSEL_CH1_TO_CH3 2// DMA1,DMA2, DMA3
#define DMPREC_DPRC 8//DMA通道优先级控制位0~5
#define DMPREC_DPRC0 8//DMA0通道优先级控制
#define DMPREC_DPRC1 9//DMA1通道优先级控制
#define DMPREC_DPRC2 10//DMA2通道优先级控制
#define DMPREC_DPRC3 11//DMA3通道优先级控制
#define DMPREC_DPRC4 12//DMA4通道优先级控制
#define DMPREC_DPRC5 13//DMA5通道优先级控制
#define DMPREC_FREE 15//
#define DMPREC_FREE_OFF 0//
#define DMPREC_FREE_ON 1//
*/
/*---------------------------------------
DMPREC_INTOSEL位域枚举
----------------------------------------*/
enum DMPREC_INTOSEL
{
INTOSEL_NONE = 0,// Timer1,RINT1,XINT1
INTOSEL_CH2_CH3 = 1,// Timer1,DMA2, DMA3
INTOSEL_CH1_TO_CH3 = 2// DMA1,DMA2, DMA3
};
/*---------------------------------------
DMPREC_FREE位域枚举
----------------------------------------*/
enum DMPREC_FREE
{
FREE_OFF = 0,//
FREE_ON = 1//
};
/*---------------------------------------
DMPREC位枚举
----------------------------------------*/
enum DMPREC
{
DMPREC_DE = 0,//DMA通道使能0~5
DMPREC_DE0 = 0,//DMA0通道使能
DMPREC_DE1 = 1,//DMA1通道使能
DMPREC_DE2 = 2,//DMA2ǖ朗鼓?
DMPREC_DE3 = 3,//DMA3通道使能
DMPREC_DE4 = 4,//DMA4通道使能
DMPREC_DE5 = 5,//DMA5通道使能
DMPREC_INTOSEL = 6,//中断多路控制位6~7 (SINT7,SINT10,SINT11)
/*
DMPREC_INTOSEL_NONE = 0,// Timer1,RINT1,XINT1
DMPREC_INTOSEL_CH2_CH3 = 1,// Timer1,DMA2, DMA3
DMPREC_INTOSEL_CH1_TO_CH3 = 2,// DMA1,DMA2, DMA3
*/
DMPREC_DPRC = 8,//DMA通道优先级控制位0~5
DMPREC_DPRC0 = 8,//DMA0通道优先级控制
DMPREC_DPRC1 = 9,//DMA1通道优先级控制
DMPREC_DPRC2 = 10,//DMA2通道优先级控制
DMPREC_DPRC3 = 11,//DMA3通道优先级控制
DMPREC_DPRC4 = 12,//DMA4通道优先级控制
DMPREC_DPRC5 = 13,//DMA5通道优先级控制
DMPREC_FREE = 15//
/*
DMPREC_FREE_OFF = 0,//
DMPREC_FREE_ON = 1//
*/
};
typedef volatile struct
{
TI_REG FREE: 1;//DMA在仿真时的动作15
TI_REG Reserved: 1;//保留位14
TI_REG DPRC5: 1;//DMA5通道优先级控制13
TI_REG DPRC4: 1;//DMA4通道优先级控制12
TI_REG DPRC3: 1;//DMA3通道优先级控制11
TI_REG DPRC2: 1;//DMA2通道优先级控制10
TI_REG DPRC1: 1;//DMA1通道优先级控制9
TI_REG DPRC0: 1;//DMA0通道优先级控制8
TI_REG INTOSEL: 2;//中断多路控制位6~7
TI_REG DE5: 1;//DMA5通道使能5
TI_REG DE4: 1;//DMA4通道使能4
TI_REG DE3: 1;//DMA3通道使能3
TI_REG DE2: 1;//DMA2通道使能2
TI_REG DE1: 1;//DMA1通道使能1
TI_REG DE0: 1;//DMA0通道使能0
}TI_BITS_DMPREC, *TI_BITS_PDMPREC;
typedef volatile union
{
TI_REG Regs;
TI_BITS_DMPREC Bits;
}TI_REG_DMPREC, *TI_REG_PDMPREC;
typedef volatile struct _TI_DMA {
TI_REG_DMPREC DMPREC;//DMA通道优先级和使能控制寄存器(0x54)
TI_REG DMSA;//DMA子区寻址寄存器(0x55)
TI_REG_DMSD DMSDI;//带子区寻址自动增加的DMA子区数据寄存器(0x56)
TI_REG_DMSD DMSDN;//子区数据寄存器(0x57)
}TI_DMA, *TI_PDMA;
#define TI_BASE_DMA ((TI_DMA *) 0x0054)//定义硬件结构指针(硬件地址)
typedef volatile struct _TI_TIMER {
TI_REG TIM;//定时器寄存器
TI_REG PRD;//定时器周期寄存器
TI_REG_TCR TCR;//定时器控制寄存器
}TI_TIMER, *TI_PTIMER;
#define TI_BASE_TIMER0 ((TI_TIMER *) 0x0024)//定义硬件结构指针(硬件地址)
#define TI_BASE_TIMER1 ((TI_TIMER *) 0x0030)//定义硬件结构指针(硬件地址)
typedef volatile union
{
TI_REG Regs;
TI_PREG Ptr;
}TI_REG_SP, *TI_REG_PSP;
typedef volatile union
{
TI_REG Regs;
TI_PREG Ptr;
}TI_REG_ARX, *TI_REG_PARX;
typedef volatile struct _TI_SREG {
//0x0000
TI_REG_IMR IMR;//中断屏蔽寄存器(0x00)
TI_REG_IFR IFR;//中断标志寄存器(0x01)
TI_REG Reserved0[4]; //保留4个空位(0x02~0x05)
TI_REG_ST0 ST0;//状态寄存器0(0x06)
TI_REG_ST1 ST1;//状态寄存器1(0x07)
TI_REG AL;//累加器A低16位(0x08)
TI_REG AH;//累加器A高16位(0x09)
TI_REG AG;//累加器A保护位(0x0a)
TI_REG BL;//累加器B低16位(0x0b)
TI_REG BH;//累加器B高16位(0x0c)
TI_REG BG;//累加器B保护位(0x0d)
TI_REG TREG;//临时寄存器(0x0e)
TI_REG TRN;//发送寄存器(0x0f)
//0x0010
TI_REG_ARX AR0;//辅助寄存器0(0x10)
TI_REG_ARX AR1;//辅助寄存器1(0x11)
TI_REG_ARX AR2;//辅助寄存器2(0x12)
TI_REG_ARX AR3;//辅助寄存器3(0x13)
TI_REG_ARX AR4;//辅助寄存器4(0x14)
TI_REG_ARX AR5;//辅助寄存器5(0x15)
TI_REG_ARX AR6;//辅助寄存器6(0x16)
TI_REG_ARX AR7;//辅助寄存器7(0x17)
TI_REG_SP SP;//堆栈指针(0x18)
TI_REG BK;//缓冲大小寄存器(0x19)
TI_REG BRC;//块重复计数器(0x1a)
TI_REG RSA;//块重复起始地址寄存器(0x1b)
TI_REG REA;//块重复结束地址寄存器(0x1c)
TI_REG_PMST PMST;//处理器工作模式状态寄存器(0x1d)
TI_REG XPC;//程序计数器扩展寄存器(0x1e)
TI_REG Reserved1[1]; //保留1个空位(0x1f)
//0x0020
TI_McBSPDATA McBSPDATA0;//McBSP数据寄存器0(0x20~0x23)
/*
TI_REG DRR20;//数据接收寄存器2(0x20)
TI_REG DRR10;//数据接收寄存器1(0x21)
TI_REG DXR20;//数据发送寄存器2(0x22)
TI_REG DXR10;//数据发送寄存器1(0x23)
*/
TI_TIMER TIMER0;//定时器寄存器0(0x24~0x26)
/*
TI_REG TIM;//定时器寄存器 (0x24)
TI_REG PRD;//定时器周期寄存器 (0x25)
TI_REG_TCR TCR;//定时器控制寄存器 (0x26)
*/
TI_REG Reserved2[1]; //保留1个空位(0x27)
TI_REG SWWSR;//软件等待状态寄存器(0x28)
TI_REG_BSCR BSCR;//分区状态寄存器(0x29)
TI_REG Reserved3[1]; //保留1个空位(0x2a)
TI_REG SWCR;//软件等待状态控制寄存器(0x2b)
TI_REG_HPIC HPIC;//HPI控制寄存器(0x2c)
TI_REG Reserved4[3]; //保留3个空位(0x2d~0x2f)
//0x0030
TI_TIMER TIMER1;//定时器寄存器1(0x30~0x32)
/*
TI_REG TIM1;//定时器寄存器1(0x30)
TI_REG PRD1;//定时器周期寄存器1(0x31)
TI_REG TCR1;//定时器控制寄存器1(0x32)
*/
TI_REG Reserved5[5]; //保留5个空位(0x33~37)
TI_McBSPADDR McBSPADDR0;//McBSP地址寄存器0(0x38~0x39)
/*
TI_REG SPSA0;//子区寻址寄存器0(0x38)
TI_REG_SPSD SPSD0;//子区数据寄存器0(0x39)
*/
TI_REG Reserved6[2]; //保留2个空位(0x3a~0x3b)
TI_REG_GPIOCR GPIOCR;//GPIO控制寄存器(0x3c)
TI_REG_GPIOSR GPIOSR;//GPIO状态寄存器(0x3d)
TI_REG Reserved7[2]; //保留2个空位(0x3e,0x3f)
//0x0040
TI_McBSPDATA McBSPDATA1;//McBSP数据寄存器1(0x40~0x43)
/*
TI_REG DRR21;//数据接收寄存器2(0x40)
TI_REG DRR11;//数据接收寄存器1(0x41)
TI_REG DXR21;//数据发送寄存器2(0x42)
TI_REG DXR11;//数据发送寄存器1(0x43)
*/
TI_REG Reserved8[4]; //保留4个空位(0x44~0x47)
TI_McBSPADDR McBSPADDR1;//McBSP地址寄存器1(0x48~0x49)
/*
TI_REG SPSA1;//子区寻址寄存器1(0x48)
TI_REG_SPSD SPSD1;//子区数据寄存器1(0x49)
*/
TI_REG Reserved9[10]; //保留10个空位(0x4a,0x4b,...0x53)
TI_DMA DMA;//DMA通道寄存器(0x54~0x57)
/*
TI_REG_DMPREC DMPREC;//DMA通道优先级和使能控制寄存器(0x54)
TI_REG DMSA;//DMA子区寻址寄存器(0x55)
TI_REG DMSDI;//带子区寻址自动增加的DMA子区数据寄存器(0x56)
TI_REG DMSDN;//子区数据寄存器(0x57)
*/
TI_REG_CLKMD CLKMD;//时钟模式寄存器(0x58)
TI_REG Reserved10[7]; //保留7个空位(0x59~0x5f)
}TI_SREG, *TI_PSREG;
#define TI_BASE_SREG ((TI_SREG *) 0x0000)//定义硬件结构指针(硬件地址)
/*--------------------------------------------------------------------------
应用举例:
//1.以结构指针寄存器模式寻址
SREG->IMR.Regs = 0x0000;
SREG->IFR.Regs = 0xffff;
SREG->PMST.Regs = (0x1ff << PMST_IPTR) | \
(1 << PMST_MP_MC) | (1 << PMST_OVLY) | (1 << PMST_CLKOFF);
SREG->IMR.Regs = (1 << IMR_TINT0);//允许TINT0中断
__enable_interrupt();//开中断
for(;;) {
SREG->ST1.Regs ^= (1 << ST1_XF);
}
//2.以结构指针寄存器位模式寻址
SREG->IMR.Regs = 0x0000;
SREG->IFR.Regs = 0xffff;
SREG->PMST.Regs = 0;
SREG->PMST.Bits.IPTR = 0x1ff;
SREG->PMST.Bits.MP_MC = true;
SREG->PMST.Bits.OVLY = true;
SREG->PMST.Bits.CLKOFF = true;
SREG->IMR.Bits.TINT0 = ture;//允许TINT0中断
__enable_interrupt();//开中断
for(;;) {
SREG->ST1.Bits.XF = !SREG->ST1.Bits.XF;
}
//3.以结构寄存器位模式直接寻址
SREGs.IMR.Regs = 0x0000;
SREGs.IFR.Regs = 0xffff;
SREGs.PMST.Regs = 0;
SREGs.PMST.Bits.IPTR = 0x1ff;
SREGs.PMST.Bits.MP_MC = true;
SREGs.PMST.Bits.OVLY = true;
SREGs.PMST.Bits.CLKOFF = true;
SREGs.IMR.Bits.TINT0 = ture;//允许TINT0中断
__enable_interrupt();//开中断
for(;;) {
SREGs.ST1.Bits.XF = !SREGs.ST1.Bits.XF;
}
---------------------------------------------------------------------------*/
extern void _delay_loop_(unsigned int);
//结构型,建议使用
extern TI_SREG SREGs;//定义全局结构变量SREGs(直接寻址,速度最快)
//结构指针型以后可能将被淘汰(主要用于在Watch内查看SREGs的内容)
extern const TI_PSREG SREG;//定义全局结构指针变量SREG
extern const TI_PMcBSP0 McBSP0;//定义全局结构指针变量McBSP0
extern const TI_PMcBSP1 McBSP1;//定义全局构指针变量McBSP1
extern const TI_PDMA DMA;//定义全局结构指针变量DMA
extern const TI_PTIMER TIMER0;//定义全局结构指针变量TIMER0
extern const TI_PTIMER TIMER1;//定义全局结构指针变量TIMER1
/*--------------------------------------------------------------------------
应用举例(仔细注意其写法的微小差异):
TIMER0->TCR.Regs |= (1 << TCR_TSS);//乇定时器0
TIMER0->PRD = 250;//设置定时周期
TIMER0->TCR.Regs &= ~(1 << TCR_TSS);//启动定时器0
或
TIMER0->TCR.Bits.TSS = 1;//关闭定时器0
TIMER0->PRD = 250;//设置定时周期
TIMER0->TCR.Bits.TSS = 0;//启动定时器0
或
SREG->TIMER0.TCRTCR.Bits.TSS = 1;//关闭定时器0
SREG->TIMER0.PRD = 250;//设置定时周期
SREG->TIMER0.TCR.Bits.TSS = 0;//启动定时器0
或
SREGs.TIMER0.TCR.Bits.TSS = 1;//关闭定时?
SREGs.TIMER0.PRD = 250;//设置定时周期0
SREGs.TIMER0.TCR.Bits.TSS = 0;//启动定时器0
TIMER1->TCR.Bits.TSS = 1;//关闭定时器1
TIMER1->PRD = 250;//设置定时周期
TIMER1->TCR.Bits.TSS = 0;//启动定时器1
或
SREGs.TIMER1.TCR.Bits.TSS = 1;//乇斩ㄊ逼?
SREGs.TIMER1.PRD = 250;//设置定时周期1
SREGs.TIMER1.TCR.Bits.TSS = 0;//启动定时器1
---------------------------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif // __C5402CFG_H
文章评论(0条评论)
登录后参与讨论