网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C5000 >> 文章正文
  TMS320C5509的TIMER的例程源码         ★★★ 【字体:
TMS320C5509的TIMER的例程源码
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-22    

 

/*
 *  Copyright 2003 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 * 
 */
/* "@(#) DSP/BIOS 4.90.270 06-11-03 (barracuda-m10)" */
/******************************************************************************\
*           Copyright (C) 2000 Texas Instruments Incorporated.
*                           All Rights Reserved
*------------------------------------------------------------------------------
* FILENAME...... timer.c
* DATE CREATED.. 01/11/2000
* LAST MODIFIED. 01/04/2001
\******************************************************************************/

#include <stdio.h>

#include <csl.h>
#include <csl_irq.h>
#include <csl_timer.h>
#include <csl_chiphal.h>

/* This is a simple timer example to set the timer with */
/* an interrupt period of 0x400 cycles.                 */

/* The example uses predefined CSL macros and symbolic  */
/* constants to create the correct register settings    */
/* needed to configure the timer.                       */


/* Reference start of interrupt vector table   */
/* This symbol is defined in file, vectors.s55 */
extern void VECSTART(void);

#define TIMER_CTRL    TIMER_TCR_RMK(\
                      TIMER_TCR_IDLEEN_DEFAULT,    /* IDLEEN == 0 */ \
                      TIMER_TCR_FUNC_OF(0),        /* FUNC   == 0 */ \
                      TIMER_TCR_TLB_RESET,         /* TLB    == 1 */ \
                      TIMER_TCR_SOFT_BRKPTNOW,     /* SOFT   == 0 */ \
                      TIMER_TCR_FREE_WITHSOFT,     /* FREE   == 0 */ \
                      TIMER_TCR_PWID_OF(0),        /* PWID   == 0 */ \
                      TIMER_TCR_ARB_RESET,         /* ARB    == 1 */ \
                      TIMER_TCR_TSS_START,         /* TSS    == 0 */ \
                      TIMER_TCR_CP_PULSE,          /* CP     == 0 */ \
                      TIMER_TCR_POLAR_LOW,         /* POLAR  == 0 */ \
                      TIMER_TCR_DATOUT_0           /* DATOUT == 0 */ \


/* Create a TIMER configuration structure that can be passed */
/* to TIMER_config CSL function for initialization of Timer  */
/* control registers.                                        */
TIMER_Config timCfg0 = {
   TIMER_CTRL,               /* TCR0 */
   0x3400u,                  /* PRD0 */
   0x0000                    /* PRSC */
};


Uint16 eventId0; 

/* Create a TIMER_Handle object for use with TIMER_open */
TIMER_Handle mhTimer0;

volatile Uint16 timer0_cnt = 0;

/* Function/ISR prototypes */
interrupt void timer0Isr(void);


int old_intm;
Uint16 tim_val;
Uint16 xfchange = 0;

void main(void)
{
  /* Initialize CSL library - This is REQUIRED !!! */
  /*CLS库的初始化,这是必需的*/
  CSL_init();
 
  /* Set IVPH/IVPD to start of interrupt vector table */
  /*修改寄存器IVPH,IVPD,重新定义中断向量表*/
  IRQ_setVecs((Uint32)(&VECSTART));
 
  /* Temporarily disable all maskable interrupts */
 /*禁止所有可屏蔽的中断源*/
 old_intm = IRQ_globalDisable();  
 
 /* Open Timer 0, set registers to power on defaults */
 /*打开定时器0,设置其为上电的的默认值,并返回其句柄*/
 mhTimer0 = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);
 
 /* Get Event Id associated with Timer 0, for use with */
 /* CSL interrupt enable functions.                    */
 /*获取定时器0的中断ID号*/        
 eventId0 = TIMER_getEventId(mhTimer0);
 
 /* Clear any pending Timer interrupts */
 /*清除定时器0的中断状态位*/
 IRQ_clear(eventId0);
 
 /* Place interrupt service routine address at */
 /* associated vector location */
 /*为定时器0设置中断服务程序*/
 IRQ_plug(eventId0,&timer0Isr);
 
 /* Write configuration structure values to Timer control regs */
 /*设置定时器0的控制与周期寄存器*/
 TIMER_config(mhTimer0, &timCfg0); 
 
 /* Enable Timer interrupt */
 /*使能定时器的中断*/
 IRQ_enable(eventId0);            
 
 /* Enable all maskable interrupts */
 /*设置寄存器ST1的INTM位,使能所有的中断*/
 IRQ_globalEnable();     
 
 /* Start Timer */
 /*启动定时器0*/
 TIMER_start(mhTimer0);
    
 for(;;)
 {
  /* Wait for at least 10 timer periods */
     /*等待10个定时周期*/
  if(xfchange == 0)
  {
     /*点亮XF的LED*/
     CHIP_FSET(ST1_55,XF,1); 
  }
  else
  {
   /*关掉XF的LED*/
     CHIP_FSET(ST1_55,XF,0);
  }
 }
 
 
 /* Restore old value of INTM */
 /*恢复INTM旧的值*/
 IRQ_globalRestore(old_intm);
 /* We are through with timer, so close it */
 /*关掉定时器0*/
 TIMER_close(mhTimer0);
}
/*定时器0的中断程序*/
interrupt void timer0Isr(void)
{
    ++timer0_cnt;
    if(timer0_cnt == 500)
    {
     xfchange = 1;
    }
    if(timer0_cnt == 1000)
    {
     timer0_cnt = 0;
     xfchange = 0; 
    }
}
 

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320C5509的RTC的例程源码
    TMS320C5509的WDT的例程源码
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号