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

📄 timer.c

📁 可以实现 DSP 6713定时器定时中断
💻 C
字号:
#include "ICETEK-C6713-A.h"
#define UART_BASE_ADDR		0x90120000
#define MCWA            *(int *)0x90100008
#define OFFSET              2
#define RBR					*((short *)(UART_BASE_ADDR+0*OFFSET))// share the same address?	
#define THR					*((short *)(UART_BASE_ADDR+0*OFFSET))//	
#define IER					*((short *)(UART_BASE_ADDR+1*OFFSET))
#define IIR					*((short *)(UART_BASE_ADDR+2*OFFSET))	
#define FCR					*((short *)(UART_BASE_ADDR+2*OFFSET))	
#define LCR					*((short *)(UART_BASE_ADDR+3*OFFSET))
#define MCR					*((short *)(UART_BASE_ADDR+4*OFFSET))
#define LSR					*((short *)(UART_BASE_ADDR+5*OFFSET))
#define MSR					*((short *)(UART_BASE_ADDR+6*OFFSET))
#define SCR					*((short *)(UART_BASE_ADDR+7*OFFSET))
#define DLL					*((short *)(UART_BASE_ADDR+0*OFFSET))
#define DLM					*((short *)(UART_BASE_ADDR+1*OFFSET))   
#define CECTL1	            *((long *)0x01800004)
#define DXR12 (*(unsigned int *)0x01900004)
#define DRR12 (*(unsigned int *)0x01900000)
/* Define McBSP1 Registers */
#define McBSP1_DRR      *(int *)0x1900000   /* Address of data receive reg.         */
#define McBSP1_DXR      *(int *)0x1900004   /* Address of data transmit reg.        */
#define McBSP1_SPCR     *(int *)0x1900008   /* Address of serial port contl. r 串口控制寄存器  */
#define McBSP1_RCR      *(int *)0x190000C   /* Address of receive control reg.    接受控制寄存器  */
#define McBSP1_XCR      *(int *)0x1900010   /* Address of transmit control reg.   传送控制寄存器  */
#define McBSP1_SRGR     *(int *)0x1900014   /* Address of sample rate generator     */
#define McBSP1_MCR      *(int *)0x1900018   /* Address of multichannel reg.         多通道标志*/
#define McBSP1_RCER     *(int *)0x190001C   /* Address of receive channel enable.  接收通道使能 */
#define McBSP1_XCER     *(int *)0x1900020   /* Address of transmit channel enable. 传输通道使能 */
#define McBSP1_PCR      *(int *)0x1900024   /* Address of pin control reg.          */
#define MCWA            *(char *)0x90100008

short int nChannelA0[256],nChannelA1[256];      //  0通道存储区,1通道存储区
short int nAD0[256],nAD1[256];               
int nPointNumber; 
int flage;
int uWork;
int inp[256];
int length;
int  channel;
char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
int bReceive,nLen;
void wait(int nWait);
void serial();
void Init_serial();
void  initMCBSP1(void);
void  interrupt Timer( void );   //////中断服务程序 要 加interrupt
void  initInterrupt(void);




main()
{
	
     nPointNumber=0;
    init_emif();	// 初始化emif
    InitCTR();		// 初始化ICETEK-CTR
    InitInterrupt();
	Init_serial();
	MCWA=0x0001;
    CSR&=0xfffffffe;	// 关中断 GIE=0
    initMCBSP1();
	 flage=0;
    channel=0;
    CSR=CSR|1; 			// 开中断
    
    
	while ( 1 )
	{
	   
		


		Delay(16);
	}
	CloseCTR();
    exit(0);
}

void InitInterrupt(void)
{
	// 设置中断控制寄存器
	CSR&=0xfffffffe;	// 关中断 GIE=0
	ISTP=0x00000c00;	// 重置中断向量表到0C00h
   	IMH=0x08000000;		// 指定Timer1产生int15中断
   	IML=0;
   	ICR=0xff;			// 清除等待的中断
	IER=0x8003;			// 使能int15中断
	// 设置定时器产生中断信号的频率
	TIMER1PRD=6250000;	// 定时器1的周期=6250000, 0.5s
	TIMER1CTL=0x3c0;	// 开始计数
	CSR=CSR|1; 			// 开中断
}

void interrupt Timer()	//中断响应函数
{      
      //指示灯闪烁
    int k ,a=0;

    k=0;
	k++;
	LBDS^=1;
	
	if(k==50)
	{
	Delay(5000);
	
    	}
	
	a++;
	if(a==10)
	{
	serial();
	 LBDS^=2;
	 //ad采样子程序
	  if(channel)         //channel 通道选择,为1 执行,,,,,
    {
        DXR12=0xe000;        //数据发送寄存器,数据要加载到数据移位发送器XSR
    }
    else
    {
        DXR12=0xc000;
    }

    uWork=DRR12;                 //数据接受寄存器,准备把数据放到总线
    uWork=uWork>>20;              //右移20位
    uWork&=0xff;                 //取低8位,
    inp[length]=uWork;          //    
    length++;
    length%=256;               // 
    if(length==0)
    {
        asm(" nop");    //此处设软件断点
    }
	
	}


    
}

void Initserial(void)
      { 	MCWA=0x00080008;
	bReceive=0;    // write the recieve flag 
	LSR = 0x80;    //线路控制寄存器
	DLL = 0x18;    //低位除数寄存器
	DLM = 0x00;    //高位除数寄存器
	LCR = 0x03;    //线路状态寄存器
	FCR = 0x01;     //FIFO控制寄存器
	MCR = 0x00;     //MODEM控制寄存器
	IER = 0x00;     //中断使能寄存器 
      
      
      }


void wait(int nWait)     // waiting   for the parameter nwait=1024
{
	int i,j,k=0;
	for ( i=0;i<nWait;i++ )
		for ( j=0;j<64;j++ )
			k++;
}


void serial(void)
{
	unsigned int uWork;
	int i;
	Init_serial();

	
	while ( 1 )
	{
		if ( bReceive==0 )                            //发送 cString[17]={ "Hello PC!,Over|" }
		{
			
			for ( i=0;i<16;i++ )
			{
				do
				{ 
					uWork=LSR;                        //把状态寄存器值给uwork,做判断 
				} 
				while ( uWork&0x040 != 0x040 );    //判断是否为空发送保持寄存器标志位
				THR=cString[i];                    //发送缓冲寄存器THR
				wait(1024);	                        //等待函数	               
			}
	    }
	
	break;	
	
     }


 }


void initMCBSP1(void)
{ 
    McBSP1_SPCR = 0;               
    McBSP1_RCR  = 0x10040;            
    McBSP1_XCR  = 0x10040;            
    McBSP1_SRGR = 0x20000083;     
    McBSP1_PCR  = 0xa08;         
    McBSP1_SPCR = 0xc15801;
}   

⌨️ 快捷键说明

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