/*
|
|
* Copyright 2002 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.80.188 12-06-02 (bios,dsk5416-a11)" */
|
|
/******************************************************************************\
|
|
* Copyright (C) 2000 Texas Instruments Incorporated.
|
|
* All Rights Reserved
|
|
*------------------------------------------------------------------------------
|
|
* FILENAME...... timer.c
|
|
* DATE CREATED.. 01/11/2000
|
|
* LAST MODIFIED. 12/29/2000
|
|
\******************************************************************************/
|
|
#include <stdio.h>
|
|
|
|
#include <csl.h>
|
|
#include <csl_irq.h>
|
|
#include <csl_timer.h>
|
|
#include "uart.h"
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
/* In this exmaple, we are simply setting the timer to interrupt */
|
|
/* every 0x800 clock cycles. All timer setup will be done in a */
|
|
/* TASK function that executes after exit from "main" */
|
|
|
|
|
|
/* Create a timer control structure */
|
|
TIMER_Config myTConfig = {
|
|
TIMER_TCR_RMK(
|
|
TIMER_TCR_SOFT_WAITZERO,
|
|
TIMER_TCR_FREE_NOSOFT,
|
|
TIMER_TCR_TRB_RESET,
|
|
TIMER_TCR_TSS_START,
|
|
TIMER_TCR_TDDR_OF(0)
|
|
), /* TCR0 */
|
|
0x0800u /* PRD0 */
|
|
};
|
|
|
|
/* Global declarations */
|
|
TIMER_Handle mhTimer;
|
|
volatile Uint16 timer_int_cnt = 0;
|
|
interrupt void timerIsr(void);
|
|
void taskFunc(void);
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
void main() {
|
|
|
|
uart_puts("C5416 Timer Test Start...\n");
|
|
|
|
/* Initialize CSL library, this step is required */
|
|
CSL_init();
|
|
/* Call example task/function */
|
|
taskFunc();
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
void taskFunc(void) {
|
|
|
|
Uint16 eventId;
|
|
int old_intm;
|
|
Uint16 err = 0;
|
|
|
|
//printf("<TIMER>\n");
|
|
uart_puts("<TIMER>\n");
|
|
|
|
/* Temporarily disable all maskable interrupts, preserving */
|
|
/* previous state of INTM */
|
|
old_intm = IRQ_globalDisable();
|
|
|
|
/* Open Timer 0, this returns a pointer to a Timer Handle */
|
|
/* that will be used as an argument to other CSL functions */
|
|
mhTimer = TIMER_open(TIMER_DEV0, TIMER_OPEN_RESET);
|
|
|
|
/* Write configuration structure values to Timer control */
|
|
/* registers. */
|
|
TIMER_config(mhTimer, &myTConfig);
|
|
|
|
/* Get Event ID associated with Timer interrupt */
|
|
eventId = TIMER_getEventId(mhTimer);
|
|
|
|
/* Clear any pending Timer interrupts */
|
|
IRQ_clear(eventId);
|
|
|
|
/* Place interrupt service routine address at associated vector */
|
|
IRQ_plug(eventId,timerIsr);
|
|
|
|
/* Enable Timer interrupt */
|
|
IRQ_enable(eventId);
|
|
|
|
/* Enable all maskable interrupts */
|
|
IRQ_globalEnable();
|
|
|
|
/* Start Timer */
|
|
TIMER_start(mhTimer);
|
|
|
|
/* wait for 20 timer periods */
|
|
while(timer_int_cnt < 20);
|
|
|
|
/* We are through with the Timer, so close it */
|
|
TIMER_close(mhTimer);
|
|
|
|
/* Restore old value of INTM */
|
|
IRQ_globalRestore(old_intm);
|
|
|
|
if (timer_int_cnt < 20)
|
|
++err;
|
|
|
|
//printf("%s\n",err?"TEST FAILED":"TEST PASSED");
|
|
//printf("<DONE>\n");
|
|
if (err)
|
|
uart_puts("TEST FAILED\n");
|
|
else
|
|
uart_puts("TEST PASSED\n");
|
|
|
|
uart_puts("<DONE>\n");
|
|
}
|
|
|
|
/*----------------------------------------------------------------------------*/
|
|
|
|
/* Timer ISR - will be called by DSP/BIOS dispatcher */
|
|
interrupt void timerIsr(void) {
|
|
TIMER_stop(mhTimer);
|
|
timer_int_cnt = timer_int_cnt + 1;
|
|
if (timer_int_cnt < 20) {
|
|
TIMER_start(mhTimer);
|
|
}
|
|
|
|
uart_puts("Entry Timer Isr function...\n");
|
|
}
|
|
|
|
|
|
|