⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 firlab.h

📁 信号fm调制与解调的dsp实现
💻 H
字号:
#define DSYNC_REVT1           0x05     /* sync to McBSP1 receive event          */
#define AUTOINIT_ENABLE		0x01     /* auto-initialization mode is enabled   */
#define DINM_ENABLE		0x01     /* DMA interrupt is enabled              */
#define IMOD_HALFBLOCK        0x01     /* DMA Int occurs each half block        */
#define CTMOD_DEC			0x00     /* Decrement counter mode                */
#define INDEXMODE_NOMOD       0x00     /* No modify (Index mode)                */
#define INDEXMODE_INC	      0x01     /* Post increment index mode             */
#define HIGH_PRIORITY		0x01     /* Highest priority for DMA channel      */
#define INTSEL_01			0x01     /* RINT0,XINT0,RINT2,XINT2,DMAC2,DMAC3,  */
						   /* DMAC4,DMAC5                           */
#define DSYNC_XEVT1           0x06     /* sync to McBSP1 transmit event         */
#define IMOD_BLOCK		0x00     /* DMA Int occurs at the end of the block*/
#define CTMOD_DEC			0x00     /* Decrement counter mode                */
#define SPACE_DATA		0x01     /* DMA Data Space Select                 */

/* Memory-Mapped Register Definitions */
#define DMPREC               (*(volatile unsigned int*)(0x0054u))
#define DMSBA                (*(volatile unsigned int*)(0x0055u))
#define DMSDI                (*(volatile unsigned int*)(0x0056u))
#define DMSDN                (*(volatile unsigned int*)(0x0057u))

#define IMR	                 (*(volatile unsigned int*)(0x0000u))
#define IFR                  (*(volatile unsigned int*)(0x0001u))
#define XPC	                 (*(volatile unsigned int*)(0x001eu))
#define PMST	           (*(volatile unsigned int*)(0x001du))
#define BSCR                 (*(volatile unsigned int*)(0x0029u))




#define DRR1_ADDR(port)      (port ? 0x41 : 0x21)
#define DXR1_ADDR(port)      (port ? 0x43 : 0x23)

#define TCR_ADDR(port)       (port ? 0x32 : 0x26)
#define TCR(port)            (*(volatile unsigned int*)TCR_ADDR(port))

#define PRD_ADDR(port)       (port ? 0x31 : 0x25)
#define PRD(port)            (*(volatile unsigned int*)PRD_ADDR(port))

/* Sub Address Register Definitions */
#define DMSRC_SUBADDR	0x00
#define DMDST_SUBADDR	0x01
#define DMCTR_SUBADDR	0x02
#define DMSEFC_SUBADDR	0x03
#define DMMCR_SUBADDR	0x04

#define DMSRCP_SUBADDR	0x1E
#define DMDSTP_SUBADDR	0x1F
#define DMIDX0_SUBADDR	0x20
#define DMIDX1_SUBADDR	0x21
#define DMFRI0_SUBADDR	0x22
#define DMFRI1_SUBADDR	0x23           
#define DMGSA_SUBADDR	0x24
#define DMGDA_SUBADDR	0x25
#define DMGCR_SUBADDR	0x26
#define DMGFR_SUBADDR	0x27

/* Channel Definitions */
#define DMA_CH0         0
#define DMA_CH1         1
#define DMA_CH2         2
#define DMA_CH3         3
#define DMA_CH4         4
#define DMA_CH5         5

/* DMA Channel Flags for IMR/IFR */
#define DMAC0		6
#define DMAC1		7
#define DMAC2		10
#define DMAC3		11
#define DMAC4		12
#define DMAC5		13


/* Register Bit Fields */
#define TDDR		 0
#define TSS			 4                            
#define TRB          5

/* Macro Definitions */
/* DMA Framecount Set */
#define DMA_FRAMECOUNT(chan, value) \
        { DMSBA = (chan * 5) + DMSEFC_SUBADDR;\
          DMSDN = (DMSDN & 0xFF00u) | value;\
        }

/* DMA Channel Enable */
#define DMA_ENABLE(chan) \
          DMPREC |= (1 << chan);


#define INTR_GLOBAL_ENABLE\
        asm("\tRSBX	INTM")

#define INTR_CLR_FLAG(flag)\
      {IFR |= (0x1u << flag);}

#define INTR_ENABLE(flag)\
     {IMR |= ((0x1u) << flag);}

#define TIMER_HALT(port)\
        TCR(port) |= (0x1u << TSS)  
        
#define TIMER_START(port)\
        TCR(port) = (TCR(port) & (~(0x1u) << TSS)) | (0x1u << TRB)        

#define TIMER_RESET(port)\
	{ TIMER_HALT(port);\
          TCR(port) &= 0xFFF0u;\
          PRD(port) = 0xffffu;\
          TIMER_START(port); }

/* DMA Reset All */
static inline void dma_reset_all( void )
{
  unsigned short channel;

  DMPREC = 0x0000u;

  DMSBA  = DMSRC_SUBADDR;

  for (channel= 0;channel <= 4; channel++)
  {
      DMSDI = 0x0000u;             //src
      DMSDI = 0x0000u;             //dst
      DMSDI = 0x0000u;             //ctr
      DMSDI = 0x0000u;             //sefc
      DMSDI = 0x0000u;             //mcr
  }         
                                  

  DMSBA = DMSRCP_SUBADDR;

  DMSDI = 0x0000u;  /*DMSRCP*/
  DMSDI = 0x0000u;  /*DMDSTP*/
  
  DMSDI = 0x0000u;  /*DMIDX0*/
  DMSDI = 0x0000u;  /*DMIDX1*/
  DMSDI = 0x0000u;  /*DMFRI0*/
  DMSDI = 0x0000u;  /*DMFRI1*/          
  DMSDI = 0x0000u;  /*DMGSA*/
  DMSDI = 0x0000u;  /*DMGDA*/
  DMSDI = 0x0000u;  /*DMGCR*/
  DMSDI = 0x0000u;  /*DMGRF*/
}          

/* Initialize Global DMA Registers */
static inline void dma_global_init(
              unsigned int dmpre       /*IN:Value for priority and enable reg*/
             ,unsigned int dmsrcp      /*IN:Value for source page reg        */
             ,unsigned int dmdstp      /*IN:Value for dest page reg          */
             ,unsigned int dmidx0      /*IN:Value for element index reg 0    */
             ,unsigned int dmidx1      /*IN:Value for element index reg 1    */
             ,unsigned int dmfri0      /*IN:Value for frame index reg 0      */
             ,unsigned int dmfri1      /*IN:Value for frame index reg 1      */
             ,unsigned int dmgsa       /*IN:Value for global src addr reload */
             ,unsigned int dmgda       /*IN:Value for global dst addr reload */
             ,unsigned int dmgcr       /*IN:Value for global count reload reg*/
             ,unsigned int dmgfr)      /*IN:Value for global frame reload reg*/
{

  DMPREC &= 0xFF00u;       /* Temporarily Disable All Channels */
  DMSBA = DMSRCP_SUBADDR;  /* Set DMA SubBank Address Register */

  DMSDI = dmsrcp;    /* Write to DMA src subbank register with increment */
  DMSDI = dmdstp;
  DMSDI = dmidx0;
  DMSDI = dmidx1;
  DMSDI = dmfri0;
  DMSDI = dmfri1;
  DMSDI = dmgsa;
  DMSDI = dmgda;
  DMSDI = dmgcr;
  DMSDI = dmgfr;

  DMPREC = dmpre;
}

static inline void   dma_init(
             unsigned int channel      /*IN: DMA channel number              */
            ,unsigned int dmsefc       /*IN: Value to set sync & fr reg      */
            ,unsigned int dmmcr        /*IN: Value to set mode control reg   */
		,unsigned int dmctr	   /*IN: Value to set element count reg  */
            ,unsigned int src_page     /*IN: Value to set source page reg    */
            ,unsigned int src_addr     /*IN: Value to set source addr reg    */
            ,unsigned int dst_page     /*IN: Value to set dest page reg      */
            ,unsigned int dst_addr     /*IN: Value to set dest addr reg      */
                )
{
  DMSBA = (channel * 5) + DMSRC_SUBADDR;

  DMSDI = src_addr;     /* Write to DMA src subbank register with increment */
  DMSDI = dst_addr;
  DMSDI = dmctr;
  DMSDI = dmsefc;
  DMSDI = dmmcr;


  DMSBA = DMSRCP_SUBADDR;

  DMSDI = src_page;
  DMSDI = dst_page;  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -