⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 epower_28x_initfunction.c

📁 在TI的TMSF2812平台上
💻 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 + -