📄 epower_28x_initfunction.c
字号:
/*
FILE: DSP281x_ComputeFuntion.c
TITLE: Compute Program(Compute).
AUTHOR: Xu Kangping
DESCRIPTION:
This file define some function about DSP2812 to compute the
parameter about eletric power.
The Epower_28x headerfiles are required to build this file.
Watch Variables:
CpuTimer0.InterruptCount
*/
#include "Epower_28x.h"
/* define the ADC73360 initialial register bytes */
Uint16 adcinitdata[SEND_WORD] = {0x810F,0x8261,0x8388,0x8488,0x8588,0x8600,0x8700,0x8001};
// 0x810F: DMCLK = MCLK; SCLK = DMCLK; SAMPLE RATE = DMCLK/256
// 0x8261: Disable 5V Mode; Enable REFOUT; REF Power Up; Global Power-Up
// 0x8388: Power Control(ADC1) ON; Input Gain 0db
// Power Control(ADC2) ON; Input Gain 0db;
// 0x8488: Power Control(ADC3) ON; Input Gain 0db
// Power Control(ADC4) ON; Input Gain 0db;
// 0x8588: Power Control(ADC5) ON; Input Gain 0db
// Power Control(ADC6) ON; Input Gain 0db;
// 0x8600: Disable Single-Ended Input Mode
// 0x8700: Disable Invert Channel Mode
// 0x8001: Software Reset OFF; Device Count: 0; Disable SPORT Loop-Back Mode;
// Disable Mixed Mode; Program Mode
extern long sum_ui[6];
extern int z_ui[6];
extern long sum_p[3];
extern long sum_q[3];
/* define some initialize before the compute */
void InitCompute(void)
{
Uint16 i;
for(i=0;i<6;i++)
{
sum_ui[i] = 0;
}
for(i=0;i<6;i++)
{
z_ui[i] = 0;
}
for(i=0;i<3;i++)
{
sum_p[i] = 0;
}
for(i=0;i<3;i++)
{
sum_q[i] = 0;
}
}
/* define the Test pin */
void ConfigReset(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM1_GPIOA0 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA0 = 1;
EDIS;
}
/* define the SE pin */
void ConfigSE(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.bit.PWM2_GPIOA1 = 0;
GpioMuxRegs.GPADIR.bit.GPIOA1 = 1;
EDIS;
}
void delay_loop(void)
{
long k;
for(k = 0;k < 10000;k++) ;
}
void ConfigMcbsp(void)
{
EALLOW;
// Port F MUX - xx11 1111 0000 0000
GpioMuxRegs.GPFMUX.all=0x3F00; // Select GPIOs to be McBSP pins
EDIS;
}
void McbspXmit(Uint16 a, Uint16 b)
{
McbspaRegs.DXR2.all = b;
McbspaRegs.DXR1.all = a;
}
void InitMcbspNodlb(void)
{
// 禁止空转模式,不产生帧同步信号,采样率产生器复位,发送转换器为空,发送器未准备好
// 串行口发送器禁止
McbspaRegs.SPCR2.all = 0x0100; // 串行口控制寄存器2
// 禁止回送,上升沿发送数据,下降沿接收数据与PCR的CLKXP和CLKRP有关
McbspaRegs.SPCR1.all = 0x0000; // 串行口控制寄存器,
McbspaRegs.RCR2.all = 0x0; // 接收控制寄存器2
McbspaRegs.RCR1.all = 0x0; // 接收控制寄存器1
McbspaRegs.XCR2.all = 0x0; // 发送控制寄存器2
McbspaRegs.XCR1.all = 0x0; // 发送控制寄存器1
McbspaRegs.MCR2.all = 0x0000; // 多通道寄存器2
McbspaRegs.MCR1.all = 0x0000; // 多通道寄存器1
McbspaRegs.PCR.all = 0x0000; // 引脚控制寄存器
// McbspaRegs.RCERA.all = 0X0001;
// McbspaRegs.XCERA.all = 0X0001;
// McbspaRegs.RCERB.all = 0X0000;
// McbspaRegs.XCERB.all = 0X0000;
}
void InitMcbsp16bit(void)
{
McbspaRegs.SPCR1.bit.RJUST = 0; // word Rjustifed,DRR内右对齐和0填充高位
McbspaRegs.RCR2.bit.RCOMPAND = 00; // No R/XCOMPAND,无压缩扩展模式
McbspaRegs.RCR2.bit.RDATDLY = 1;
McbspaRegs.XCR2.bit.XCOMPAND = 00; // 无压缩扩展模式,首先传送高位
McbspaRegs.XCR2.bit.XDATDLY = 1;
McbspaRegs.RCR1.bit.RWDLEN1 = 2; // 16-bit word接收字长16位
McbspaRegs.XCR1.bit.XWDLEN1 = 2; // 16-bit word发送字长16位
McbspaRegs.SPCR2.bit.XRST = 1; // enable XRST/RRST串行口发送使能
McbspaRegs.SPCR2.bit.XRDY = 1;
McbspaRegs.SPCR1.bit.RRST = 0; // not 串行口接收器打开
delay_loop();
}
void InitMcbspFifo(void)
{
McbspaRegs.MFFTX.all = 0x0000;
McbspaRegs.MFFRX.bit.RXFFIENA =1 ;
McbspaRegs.MFFRX.bit.RXFFIL = FIFO_LEVEL;
McbspaRegs.MFFCT.all = 0x0;
McbspaRegs.MFFINT.all = 0x0;
McbspaRegs.MFFST.all = 0x0;
McbspaRegs.MFFTX.bit.MFFENA = 1; // Enable FIFO允许FIFO的增强
McbspaRegs.MFFTX.bit.TXFIFO_RESET = 1; // Enable Transmit channel
McbspaRegs.MFFRX.bit.RXFIFO_RESET = 0; // Reset Receive channel
delay_loop();
}
void InitAdc73360(void)
{
Uint16 i;
McbspaRegs.SPCR1.bit.RRST = 1;
McbspaRegs.MFFRX.bit.RXFIFO_RESET = 1; // Enable Receive channel
SE_1;
if(WORD_SIZE == 16)
{
for(i=0;i<SEND_WORD;i++)
{
McbspXmit(adcinitdata[i],0x0000);
}
while(McbspaRegs.MFFRX.bit.RXFFST != 8) {}
McbspaRegs.MFFRX.bit.RXFIFO_RESET = 0; // Reset Receive channel
McbspaRegs.MFFRX.bit.RXFIFO_RESET = 1; // Enable Receive channel
PieCtrlRegs.PIEIER6.bit.INTx5 = 1; // Enable Mcbsp Interrupt
StartCpuTimer0(); // Start CpuTimer0
EvbRegs.CAPCONB.bit.CAPRES = 0;
}
}
void ConfigMCLK(void)
{
EALLOW;
GpioMuxRegs.GPBMUX.all = 0x00FF; // Enable PWM7-PWM12
EDIS;
}
void ConfigCAPB(void)
{
EALLOW;
GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8 = 1; // Enable CAP4
EDIS;
}
void InitEvb(void)
{
// EVB Configure T3PWM, T4PWM and PWM7-PWM12
// Initialize EVB Timer3
// Timer3 controls T3PWM and PWM7-12
EvbRegs.T3PR = 12; // Timer3 period 15MHz
// EvbRegs.T3CMPR = 4; // Timer3 compare
EvbRegs.T3CNT = 0x0000; // Timer3 counter
// TMODE = continuous up/down
// Timer enable
// Timer compare enable
EvbRegs.T3CON.all = 0x0842;
// Setup T3PWM and T4PWM
// Drive T3/T4 PWM by compare logic
EvbRegs.GPTCONB.bit.TCMPOE = 1;
// Polarity of GP Timer 3 Compare = Active low
EvbRegs.GPTCONB.bit.T3PIN = 1;
// Enable compare for PWM7-PWM12
EvbRegs.CMPR4 = 6;
// Compare action control. Action that takes place on a cmpare event
// Output pin 1 CMPR7 - active high
// Output pin 2 CMPR8 - active low
// Output pin 3 CMPR9 - active high
// Output pin 4 CMPR10 - active low
// Output pin 5 CMPR11 - active high
// Output pin 6 CMPR12 - active low
EvbRegs.ACTRB.all = 0x0666;
EvbRegs.DBTCONB.all = 0x0000; // Disable deadband
EvbRegs.COMCONB.all = 0xA600;
}
void InitCAPB(void)
{
// EvaRegs.CAPCONA.bit.CAPRES = 0;
// EvaRegs.CAPCONA.all = 0x0B0A8; // 1011 0000 1010 1000b sets 捕捉123使能、定时器2、下升沿
EvbRegs.CAPCONB.bit.CAPRES = 0;
EvbRegs.CAPCONB.all = 0x0B0A8; // 1011 0000 1010 1000b sets 捕捉456使能、定时器4、下升沿
// 定时器2设置 128*6分频20ms=31250个脉冲
// EvaRegs.T2CMPR = 0x0FFFF; // Setup T1 compare value
// EvaRegs.T2PR = 0x0FFFF; // 1ms Setup period register
// EvaRegs.T2CON.all = 0x1746; // 0001 0111 0100 0110 连续增 128分频
// 定时器4设置 128*6分频20ms=31250个脉冲
EvbRegs.T4CMPR = 0x0FFFF;
EvbRegs.T4PR = 0x0FFFF;
EvbRegs.T4CON.all = 0x1706; // 0001 0111 0100 0110 连续增 128分频
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -