📄 example_rtm.c
字号:
/*
bit 15 1: 0=reserved, 1=TMS2 (always write as 1)
bit 14 1: 0=reserved, 1=TMS (always write as 1)
bit 13 1: 0=reserved, 1=TD0 (always write as 1)
bit 12 1: 0=reserved, 1=TDI (always write as 1)
bit 11 1: 0=reserved, 1=TCK (always write as 1)
bit 10 1: 0=reserved, 1=EMU1 (always write as 1)
bit 9 1: 0=reserved, 1=EMU0 (always write as 1)
bit 8 0: 0=IOPD0, 1=XINT2/ADCSOC
bit 7 0: 0=IOPC7, 1=CANRX
bit 6 0: 0=IOPC6, 1=CANTX
bit 5 0: 0=IOPC5, 1=SPISTE
bit 4 0: 0=IOPC4, 1=SPICLK
bit 3 0: 0=IOPC3, 1=SPISOMI
bit 2 0: 0=IOPC2, 1=SPISIMO
bit 1 0: 0=IOPC1, 1=BIO*
bit 0 0: 0=IOPC0, 1=W/R*
*/
*MCRC = 0x0000; /* group C pins */
/*
bit 15 0: reserved
bit 14 0: 0=IOPF6, 1=IOPF6
bit 13 0: 0=IOPF5, 1=TCLKINB
bit 12 0: 0=IOPF4, 1=TDIRB
bit 11 0: 0=IOPF3, 1=T4PWM/T4CMP
bit 10 0: 0=IOPF2, 1=T3PWM/T3CMP
bit 9 0: 0=IOPF1, 1=CAP6
bit 8 0: 0=IOPF0, 1=CAP5/QEP4
bit 7 0: 0=IOPE7, 1=CAP4/QEP3
bit 6 0: 0=IOPE6, 1=PWM12
bit 5 0: 0=IOPE5, 1=PWM11
bit 4 0: 0=IOPE4, 1=PWM10
bit 3 0: 0=IOPE3, 1=PWM9
bit 2 0: 0=IOPE2, 1=PWM8
bit 1 0: 0=IOPE1, 1=PWM7
bit 0 0: 0=IOPE0, 1=CLKOUT
*/
/*** Configure IOPC0 pin as an output ***/
*PCDATDIR = *PCDATDIR | 0x0100;
/*** Setup timers 1 and 2, and the PWM configuration ***/
*T1CON = 0x0000; /* disable timer 1 */
*T2CON = 0x0000; /* disable timer 2 */
*GPTCONA = 0x0000; /* configure GPTCONA */
/*
bit 15 0: reserved
bit 14 0: T2STAT, read-only
bit 13 0: T1STAT, read-only
bit 12-11 00: reserved
bit 10-9 00: T2TOADC, 00 = no timer2 event starts ADC
bit 8-7 00: T1TOADC, 00 = no timer1 event starts ADC
bit 6 0: TCOMPOE, 0 = Hi-z all timer compare outputs
bit 5-4 00: reserved
bit 3-2 00: T2PIN, 00 = forced low
bit 1-0 00: T1PIN, 00 = forced low
*/
/* Timer 1: configure to clock the PWM on PWM1 pin */
/* Symmetric PWM, 20KHz carrier frequency, 25% duty cycle */
*T1CNT = 0x0000; /* clear timer counter */
*T1PR = pwm_half_per; /* set timer period */
*DBTCONA = 0x0000; /* deadband units off */
*CMPR1 = pwm_duty; /* set PWM1 duty cycle */
*ACTRA = 0x0002; /* PWM1 pin set active high */
/*
bit 15 0: space vector dir is CCW (don't care)
bit 14-12 000: basic space vector is 000 (dont' care)
bit 11-10 00: PWM6/IOPB3 pin forced low
bit 9-8 00: PWM5/IOPB2 pin forced low
bit 7-6 00: PWM4/IOPB1 pin forced low
bit 5-4 00: PWM3/IOPB0 pin forced low
bit 3-2 00: PWM2/IOPA7 pin forced low
bit 1-0 10: PWM1/IOPA6 pin active high
*/
*COMCONA = 0x8200; /* configure COMCON register */
/*
bit 15 1: 1 = enable compare operation
bit 14-13 00: 00 = reload CMPRx regs on timer 1 underflow
bit 12 0: 0 = space vector disabled
bit 11-10 00: 00 = reload ACTR on timer 1 underflow
bit 9 1: 1 = enable PWM pins
bit 8-0 0's: reserved
*/
*T1CON = 0x0840; /* configure T1CON register */
/*
bit 15-14 00: stop immediately on emulator suspend
bit 13 0: reserved
bit 12-11 01: 01 = continous-up/down count mode
bit 10-8 000: 000 = x/1 prescaler
bit 7 0: reserved in T1CON
bit 6 1: TENABLE, 1 = enable timer
bit 5-4 00: 00 = CPUCLK is clock source
bit 3-2 00: 00 = reload compare reg on underflow
bit 1 0: 0 = disable timer compare
bit 0 0: reserved in T1CON
*/
/* Timer 2: configure to generate a 250ms periodic interrupt */
*T2CNT = 0x0000; /* clear timer counter */
*T2PR = timer2_per; /* set timer period */
*T2CON = 0xD740; /* configure T2CON register */
/*
bit 15-14 11: stop immediately on emulator suspend
bit 13 0: reserved
bit 12-11 10: 10 = continous-up count mode
bit 10-8 111: 111 = x/128 prescaler
bit 7 0: T2SWT1, 0 = use own TENABLE bit
bit 6 1: TENABLE, 1 = enable timer
bit 5-4 00: 00 = CPUCLK is clock source
bit 3-2 00: 00 = reload compare reg on underflow
bit 1 0: 0 = disable timer compare
bit 0 0: SELT1PR, 0 = use own period register
*/
/*** Other setup ***/
LED_index = 0x0001; /* initialize the LED index */
count = 0; /* initialize counter */
/*** Setup the core interrupts ***/
*IMR = 0x0000; /* clear the IMR register */
*IFR = 0x007F; /* clear any pending core interrupts */
#if REALTIME != 0 /* RTM is in use */
*IMR = 0x0044; /* enable desired core interrupt + RTM interrupt */
#else /* RTM not in use */
*IMR = 0x0004; /* enable desired core interrupts */
#endif
/*** Setup the event manager interrupts ***/
*EVAIFRA = 0xFFFF; /* clear all EVA group A interrupts */
*EVAIFRB = 0xFFFF; /* clear all EVA group B interrupts */
*EVAIFRC = 0xFFFF; /* clear all EVA group C interrupts */
*EVAIMRA = 0x0000; /* enable desired EVA group A interrupts */
*EVAIMRB = 0x0001; /* enable desired EVA group B interrupts */
*EVAIMRC = 0x0000; /* enable desired EVA group C interrupts */
*EVBIFRA = 0xFFFF; /* clear all EVB group A interrupts */
*EVBIFRB = 0xFFFF; /* clear all EVB group B interrupts */
*EVBIFRC = 0xFFFF; /* clear all EVB group C interrupts */
*EVBIMRA = 0x0000; /* enable desired EVB group A interrupts */
*EVBIMRB = 0x0000; /* enable desired EVB group B interrupts */
*EVBIMRC = 0x0000; /* enable desired EVB group C interrupts */
/*** Initialize the realtime monitor ***/
#if REALTIME != 0
asm(" .ref MON_RT_CNFG");
asm(" CALL MON_RT_CNFG");
#endif
/*** Enable global interrupts ***/
asm(" CLRC INTM"); /* enable global interrupts */
/*** Proceed with main routine ***/
while(1)
{
asm(" NOP");
asm(" NOP"); /* endless loop, wait for interrupt */
}
} /* end of main() */
/********************** INTERRUPT SERVICE ROUTINES *********************/
interrupt void timer2_isr(void)
{
*EVAIFRB = *EVAIFRB & 0x0001; /* clear T2PINT flag */
/*** Sequence the LED bank on the LF2407 EVM ***/
LED = LED_index; /* light the LEDs */
LED_index = LED_index << 1; /* left shift LED index */
if(LED_index == 0x0010) LED_index = 0x0001; /* reset LED index */
/*** Increment the counter ***/
count++; /* increment counter */
if(count == 10) count = 0; /* force rollover */
/*** Toggle the IOPC0 pin ***/
*PCDATDIR = *PCDATDIR ^ 0x0001; /* XOR the IOPC0 bit to toggle the pin */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -