📄 board.c
字号:
/*****************************************************************************/
/*****************************************************************************/
/* BOARD.C - TMS320VC5510 EVM Board Support Library Functions */
/* */
/* This module provides the routines used to support board initialization. */
/* */
/* */
/* */
/* FUNCTIONS: */
/* */
/* brd_init() - initializes the board */
/* brd_set_cpu_freq() - sets the CPU frequency */
/* brd_get_cpu_freq() - returns the CPU frequency in MHz */
/* brd_emif_init() - initializes EMIF registers */
/* brd_interrupt_host() - interrupts host (HINT) */
/* brd_busy_delay() - Provides multiple 64K loop delays */
/* */
/* STATIC FUNCTIONS: */
/* */
/* */
/* GLOBAL VARIABLES DEFINED */
/* */
/* */
/*****************************************************************************/
/******************************************************************************/
/* FILE Global PROTOTYPES */
/******************************************************************************/
#pragma CODE_SECTION(brd_init, "EVM5510");
#pragma CODE_SECTION(brd_set_cpu_freq, "EVM5510");
#pragma CODE_SECTION(brd_get_cpu_freq, "EVM5510");
#pragma CODE_SECTION(brd_emif_init, "EVM5510");
#pragma CODE_SECTION(brd_interrupt_host, "EVM5510");
#pragma CODE_SECTION(brd_busy_delay, "EVM5510");
/*****************************************************************************/
/* INCLUDES AND LOCAL DEFINES */
/*****************************************************************************/
#include "board.h"
#include "intr.h"
#include "timer.h"
#include "emif.h"
/*****************************************************************************/
/* typedefs */
/*****************************************************************************/
/*****************************************************************************/
/* DEFINES */
/*****************************************************************************/
#define EVM_OSC 20
/*****************************************************************************/
/* PRAGMAS */
/*****************************************************************************/
/*****************************************************************************/
/* GLOBAL VARIABLES */
/*****************************************************************************/
#pragma DATA_SECTION(boardInitFlag, "EVMDATA");
s16 boardInitFlag = False;
/*****************************************************************************/
/* EXTERNAL variables */
/*****************************************************************************/
extern int _vectors; //Start label of vector table
/******************************************************************************/
/* FILE LOCAL (STATIC) VARIABLES */
/******************************************************************************/
#pragma DATA_SECTION(cpuFreq, "EVMDATA");
u16 cpuFreq = 0; //default to unassigned
/******************************************************************************/
/* FILE LOCAL (STATIC) PROTOTYPES */
/******************************************************************************/
/******************************************************************************/
/* FUNCTIONS */
/******************************************************************************/
/******************************************************************************/
/* s16 brd_init(u16 freq) - Initialize EVM board for use */
/* */
/* Parameters: */
/* - freq: Desired board operating frequency. */
/* */
/* Return: */
/* - BRD_OK on success */
/* - BRD_ERROR on failure */
/* */
/* Notes: */
/* */
/* Board frequencies must be a multiple of 10 with the lowest being 20 MHz */
/* and the highest being 160 MHz. */
/* */
/******************************************************************************/
s16 brd_init(u16 freq)
{
brd_set_cpu_freq(freq);
brd_emif_init();
TIMER_HALT(TIMER_PORT0);
TIMER_HALT(TIMER_PORT1);
// disable interrupts
INTR_GLOBAL_DISABLE;
// clear IFR/IER registers
IER0 = 0;
IFR0 = 0;
IER1 = 0;
IFR1 = 0;
CPLD_CTRL1_REG = CPLD_CTRL1_DEFAULT;
CPLD_CTRL2_REG = CPLD_CTRL2_DEFAULT;
CPLD_DBIO_REG = CPLD_DBIO_DEFAULT;
CPLD_SEM0_REG = CPLD_SEM0_DEFAULT;
CPLD_SEM1_REG = CPLD_SEM1_DEFAULT;
CPLD_SLIC_REG = CPLD_SLIC_DEFAULT;
// reset DSP timer
TIMER_RESET(TIMER_PORT0);
TIMER_RESET(TIMER_PORT1);
//Initialize interrupt vector pointers
REG_WRITE(IVPH_ADDR,(((u32)&_vectors & 0xffff00) >> 8));
REG_WRITE(IVPD_ADDR,(((u32)&_vectors & 0xffff00) >> 8));
boardInitFlag = True;
INTR_GLOBAL_ENABLE; // Enable Interrupts
return(BRD_OK);
}
/*****************************************************************************/
/* void brd_set_cpu_freq() */
/* */
/* This routine sets the CPU frequency */
/* */
/* Parameters: */
/* - freq frequency in MHz to set cpu clock */
/* */
/* Return: */
/* - void */
/* */
/* Notes: */
/* */
/* Board frequencies must be a multiple of 10 with the lowest being 20 MHz */
/* and the highest being 160 MHz. */
/* */
/*****************************************************************************/
void brd_set_cpu_freq(u16 freq)
{
// limit frequency to max
if (freq > MAX_CPU_FREQ)
freq = MAX_CPU_FREQ;
// limit frequency to min
if (freq < MIN_CPU_FREQ)
freq = MIN_CPU_FREQ;
// if selected freq is current freq, do nothing
if (freq == cpuFreq)
return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -