📄 main.c
字号:
//###########################################################################
// FILE: main.c
// RealSYS 2003/9/16
//###########################################################################
#include "..\DSP281x_Device.h"
#include "..\def28x.h"
#define ON_LED GpioDataRegs.GPFCLEAR.bit.GPIOF14=1
#define OFF_LED GpioDataRegs.GPFSET.bit.GPIOF14=1
#define T_LED GpioDataRegs.GPFTOGGLE.bit.GPIOF14=1
// Prototype statements for functions found within this file.
interrupt void cpu_timer0_isr(void);
extern interrupt void scia_rx_isr(void);
extern interrupt void scia_tx_isr(void);
int mcnt=0,tcnt0=0;
void init_gpio(void){
EALLOW;
GpioMuxRegs.GPAMUX.all=0x0000;
/* GPAMUX: GPIO_A function 0=IOP,1=FUN I(0)/O(1)
bit15 0: C3TRIP,PA15 ;IOP 1
bit14 0: C2TRIP,PA14 ;IOP 1
bit13 0: C1TRIP,PA13 ;IOP 1
bit12 0: TCLKINA,PA12 ;IOP 1
bit11 0: TDIRA,PA11 ;IOP 1
bit10 0: CAP3_QEPI1,PA10 ;IOP 1
bit9 0: CAP2_QEP2,PA9 ;IOP 0
bit8 0: CAP1_QEP1,PA8 ;IOP 0
bit7 0: T2PWM_T2CMP,PA7 ;IOP 1
bit6 0: T1PWM_T1CMP,PA6 ;IOP 1
bit5 0: PWM6,PA5 ;IOP 1
bit4 0: PWM5,PA4 ;IOP 1
bit3 0: PWM4,PA3 ;IOP 1
bit2 0: PWM3,PA2 ;IOP 1
bit1 0: PWM2,PA1 ;IOP 1
bit0 0: PWM1,PA0 ;IOP 1
*/
GpioMuxRegs.GPADIR.all=0xfcff; // PA DIR: 1=output,0=input
GpioMuxRegs.GPAQUAL.all=0x0000; // PA Input Qualification:
/* 0x00=No, 0x01=SYSCLK/2, 0x02=SYSCLK/4, 0x04=SYSCLK/510 */
GpioMuxRegs.GPBMUX.all=0x0000;
/* GPBMUX: GPIO_B function 0=IOP,1=FUN I(0)/O(1)
bit15 0: C6TRIP,PB15 ;IOP 1
bit14 0: C5TRIP,PB14 ;IOP 1
bit13 0: C4TRIP,PB13 ;IOP 1
bit12 0: TCLKINB,PB12 ;IOP 1
bit11 0: TDIRB,PB11 ;IOP 1
bit10 0: CAP6_QEPI2,PB10 ;IOP 1
bit9 0: CAP5_QEP4,PB9 ;IOP 1
bit8 0: CAP4_QEP3,PB8 ;IOP 1
bit7 0: T4PWM_T4CMP,PB7 ;IOP 1
bit6 0: T3PWM_T3CMP,PB6 ;IOP 1
bit5 0: PWM12,PB5 ;IOP 1
bit4 0: PWM11,PB4 ;IOP 1
bit3 0: PWM10,PB3 ;IOP 1
bit2 0: PWM9,PB2 ;IOP 1
bit1 0: PWM8,PB1 ;IOP 1
bit0 0: PWM7,PB0 ;IOP 1
*/
GpioMuxRegs.GPBDIR.all=0xffff; // PB DIR: 1=output,0=input
GpioMuxRegs.GPAQUAL.all=0x0000; // PB Input Qualification:
/* 0x00=No, 0x01=SYSCLK/2, 0x02=SYSCLK/4, 0x04=SYSCLK/510 */
GpioMuxRegs.GPDMUX.all=0x0021;
/* GPDMUX: GPIO_D function 0=IOP,1=FUN
bit6 0: T4CTRIP,PD6 ;IOP
bit5 1: T3CTRIP_PDPINTB,PD5 ;FUN
bit4 0: res
bit3 0: res
bit2 0: res
bit1 0: T2CTRIP,PD1 ;IOP
bit0 1: T1CTRIP_PDPINTA,PD0 ;FUN
*/
GpioMuxRegs.GPDDIR.all=0x5e; // DIR: 1=output,0=input
// 6(PD6),5(PDPINTB),4,3,2,1(PD1),0(PDPINTA)
// 1 0 1 1 1 1 0 = 0x5e
GpioMuxRegs.GPDQUAL.all=0x0000; // PD Input Qualification:
/* 0x00=No, 0x01=SYSCLK/2, 0x02=SYSCLK/4, 0x04=SYSCLK/510 */
GpioMuxRegs.GPEMUX.all=0x0000;
/* GPEMUX: GPIO_E function 0=IOP,1=FUN I(0)/O(1)
bit2 0: XNMI_XINT13,PE2 ;IOP 1
bit1 0: XINT2_ADCSOC,PE1 ;IOP 0
bit0 0: XINT1_XBIO,PE0 ;IOP 0
*/
GpioMuxRegs.GPEDIR.all=0x04; // DIR: 1=output,0=input
GpioMuxRegs.GPEQUAL.all=0x0000; // PE Input Qualification:
/* 0x00=No, 0x01=SYSCLK/2, 0x02=SYSCLK/4, 0x04=SYSCLK/510 */
GpioMuxRegs.GPFMUX.all=0x00f0;
/* GPFMUX: GPIO_F function 0=IOP,1=FUN I(0)/O(1)
bit14 0: XF,PF14 ;IOP 1(CPU_LED)
bit13 0: MDR,PF13 ;IOP 1
bit12 0: MDX,PF12 ;IOP 1
bit11 0: MFSR,PF11 ;IOP 1
bit10 0: MFSX,PF10 ;IOP 1
bit9 0: MCLKR,PF9 ;IOP 1
bit8 0: MCLKX,PF8 ;IOP 1
bit7 1: CANRX,PF7 ;FUN 0
bit6 1: CANTX,PF6 ;FUN 1
bit5 1: SCIRXDA,PF5 ;FUN 0
bit4 1: SCITXDA,PF4 ;FUN 1
bit3 0: SPISTE,PF3 ;IOP 1
bit2 0: SPICLK,PF2 ;IOP 1
bit1 0: SPISOMI,PF1 ;IOP 1
bit0 0: SPISIMO,PF0 ;IOP 1
*/
GpioMuxRegs.GPFDIR.all=0xff5f; // DIR: 1=output,0=input
GpioMuxRegs.GPGMUX.all=0x0030;
/* GPGMUX: GPIO_G function 0=IOP,1=FUN
bit5 1: SCIRXDB,PG5 ;FUN
bit4 1: SCITXDB,PG4 ;FUN
*/
GpioMuxRegs.GPGDIR.all=0x10; // DIR: 1=output,0=input
// 5(RXDB),4(TXDB),3,2,1,0
// 0 1 0 0 0 0 = 0x10
EDIS;
}
interrupt void cpu_timer0_isr(void){
CpuTimer0.InterruptCount++;
tcnt0++;
T_LED; // Toggle LED
// Acknowledge this interrupt to recieve more interrupts from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
void main(void){
// Initialize System Control registers, PLL, WatchDog, Clocks to default state:
// This function is found in the DSP28_SysCtrl.c file.
InitSysCtrl();
// Init.GPIO
init_gpio();
// Disable and clear all CPU interrupts:
DINT;
IER = 0x0000;
IFR = 0x0000;
// Initialize Pie Control Registers To Default State:
InitPieCtrl();
// Initialize the PIE Vector Table To a Known State:
// This function populates the PIE vector table with pointers
// to the shell ISR functions found in DSP28_DefaultIsr.c.
InitPieVectTable();
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &cpu_timer0_isr; // for TINT0
EDIS; // This is needed to disable write to EALLOW protected registers
InitCpuTimers();
// ConfigCpuTimer(&CpuTimer0, 100, 1000000); // 100MHz CPU Freq, 1 second Period (in uSeconds)
// ConfigCpuTimer(&CpuTimer0, 150, 500000); // 150MHz CPU Freq, 0.5 sec Period (in uSeconds)
// ConfigCpuTimer(&CpuTimer0, 150, 10); // 150MHz CPU Freq, 10 usec Period (in uSeconds)
ConfigCpuTimer(&CpuTimer0, 150, 100000); // 150MHz CPU Freq, 100 msec Period (in uSeconds)
StartCpuTimer0();
// Interrupt Enable Register
IER |= M_INT1; // for TINT0
// PIE : Peripheral Interrupts setting
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // for TINT0
// for SCI debug
sci_debug_init();
// Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
while(1){
mcnt++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -