📄 c30.c
字号:
/* C30.C - TMS320C30/C31 SUPPORT PROGRAMS */
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "c30.h"
AIC_COMMAND_0 aic_command_0; /* AIC COMMAND WORD 0 */
AIC_COMMAND_1 aic_command_1; /* AIC COMMAND WORD 1 */
AIC_COMMAND_2 aic_command_2; /* AIC COMMAND WORD 2 */
AIC_COMMAND_3 aic_command_3; /* AIC COMMAND WORD 3 */
volatile int send_command = OFF; /* FLAG TO SEND AIC COMMAND WORD */
volatile int secondary_transmit = OFF; /* FLAG TO SENT SECONDARY TRANSMIT*/
int aic_secondary = 0; /* COMMAND TO SENT ON SECONDARY TRANSMIT */
/* BUS, TIMER, SERIAL PORT BASE LOCATIONS */
volatile int *bus = (volatile int *) 0x808060;
volatile int (*timer)[16] = (volatile int (*)[16]) 0x808020;
volatile int (*serial_port)[16] = (volatile int (*)[16]) 0x808040;
/* C_INT99(): ERRONEOUS INTERRUPT SERVICE ROUTINE */
void c_int99(void)
{
for(;;);
}
/* INIT_EVM(): INITIALIZE TMS320C30 EVALUATION MODULE */
void init_evm(void)
{
/* this is not on the C31 - PME */
/* bus[EXPANSION] = 0x0;*/ /* ZERO WAIT STATES ON EXPANSION BUS */
bus[PRIMARY] = 0x0; /* ZERO WAIT STATES ON PRIMARY BUS */
asm(" OR 800h,ST"); /* TURN ON CACHE */
}
/* INIT_AIC(): INITIALIZE COMMUNICATIONS TO AIC */
void init_aic(void)
{
volatile int i;
/* SET AIC CONFIGURATION
1. ALLOW 16 KHZ SAMPLING RATE AND 5.6 KHZ ANTIALIASING FILTER
2. DISABLE A/D HIGHPASS FILTER
3. SET SYNCHRONOUS TRANSMIT AND RECEIVE
4. SET AIC FOR +/- 1.5 V INPUT
*/
aic_command_0.command = 0; /* SETUP AIC COMMAND WORD ZERO */
aic_command_0.ra = 7; /* ADJUST SAMPLING RATE TO 16 kHz */
aic_command_0.ta = 7; /* AND 4.6 kHz ANTIALIAS FILTER */
aic_command_1.command = 1; /* SETUP DEFAULT AIC COMMAND WORD 1 */
aic_command_1.ra_prime = 1;
aic_command_1.ta_prime = 1;
aic_command_1.d_f = 0;
aic_command_2.command = 2; /* SETUP DEFAULT AIC COMMAND WORD 2 */
aic_command_2.rb = 24;
aic_command_2.tb = 24;
aic_command_3.command = 3;
aic_command_3.highpass = OFF; /* TURN ON INPUT HIGHPASS FILTER */
aic_command_3.loopback = OFF; /* DISABLE AIC LOOPBACK */
aic_command_3.aux = OFF; /* DISABLE AUX INPUT */
aic_command_3.sync = ON; /* ENABLE SYNCHRONOUS A/D AND D/A */
aic_command_3.gain = LINE_V; /* SET FOR LINE-LEVEL INPUT */
aic_command_3.sinx = ON; /* ENABLE SIN x/x CORRECTION FILTER */
/* CONFIGURE TIMER 0 TO ACT AS AIC MCLK */
timer[0][PERIOD] = 0x1;
timer[0][GLOBAL] = 0x2C1;
/* CONFIGURE SERIAL PORT 0
1. EXTERNAL FSX, FSR, CLKX, CLKR
2. VARIABLE DATA RATE TRANSMIT AND RECEIVE
3. HANDSHAKE DISABLED
4. ACTIVE HIGH DATA AND CLK
5. ACTIVE LOW FSX,FSR
6. 16 BIT TRANSMIT AND RECEIVE WORD
7. TRANSMIT INTERRUPT
8. RECEIVE INTERRUPT ENABLED/RECEIVE
9. FSX, FSR, CLKX, CLKR, DX, DR CONFIGURED AS SERIAL PORT PINS
*/
serial_port[0][X_PORT] = 0x111;
serial_port[0][R_PORT] = 0x111;
asm(" LDI 2,IOF"); /* RESET AIC BY PULLING XF0 ACTIVE-LOW */
for(i = 0; i < 50; i++); /* KEEP RESET LOW FOR SOME PERIOD OF TIME */
serial_port[0][GLOBAL] = 0x0e970300; /* WRITE SERIAL PORT CONTROL */
serial_port[0][X_DATA] = 0x0; /* CLEAR SERIAL TRANSMIT DATA */
asm(" LDI 6,IOF"); /* PULL AIC OUT OF RESET */
asm(" LDI 0,IF"); /* CLEAR ANY INTERRUPT FLAGS */
asm(" LDI 410h,IE"); /* ENABLE DMA & SERIAL PORT 0 TRANSMIT INTERRUPTS*/
asm(" OR 2000h,ST"); /* SET GLOBAL INTERRUPT ENABLE BIT */
/* MODIFY AIC CONFIGURATION */
configure_aic(*((int *) &aic_command_0));
configure_aic(*((int *) &aic_command_1));
configure_aic(*((int *) &aic_command_2));
configure_aic(*((int *) &aic_command_3));
}
/* CONFIGURE_AIC(): INITIATE AIC CONFIGURATION WORD TRANSMISSION ON NEXT */
/* INTERRUPT AFTER ALL PREVIOUS COMMANDS ARE SENT */
void configure_aic(int i)
{
while(send_command || secondary_transmit);
aic_secondary = i;
send_command = ON;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -