📄 init_dc_all.c
字号:
/***********************************************************************************
* FILE:init_all.c *
* TMS320LF2407A TEST BED CODE *
* ZHEJIANG TIANHUANG TECHNOLOGY INDUSTRIAL CO.,Ltd *
* 07/28/2006 Vesion 1.0 *
* Jzming *
***********************************************************************************/
#include "TYPEDEFS.H"
#include "F2407_c.H"
#include "CONSTANT.H"
#include "self_define.h"
#include <stdio.h>
#include <math.h>
void sytem_init();
void adc_init();
void io_init();
void spi_init();
void ev_init();
void sci_init();
void cap_init();
extern int temp;
/* ------------------------------------------------------------ */
/* 系统初始化 */
/* ------------------------------------------------------------ */
void sytem_init()
{
temp=0x7C0;
asm(" setc INTM");
asm(" setc SXM");
asm(" clrc OVM");
asm(" clrc CNF");
asm(" out _temp,0ffffh");
*IMR = 0x0012; //INT2
*IFR = 0xFFFF;
*SCSR1 = 0x00FC; //system clk=40M
// *SCSR2 = (*SCSR2)|0x40;
*WDCR = 0x6F;
// KICK_DOG; //Disable the watchdog
// *WSGR = 0x0000; //禁止所有等待状态
}
/* ----------------------------------------------------------- */
/* A/D采样初始化 */
/* ----------------------------------------------------------- */
void adc_init()
{
*ADCTRL1 = 0x4000; //Reset The Adc
*ADCTRL1 = 0x3020; //Free Run, Run/Stop mode, Low Pri
*MAX_CONV = 0x0004; //Setup for 5 conversions
*CHSELSEQ1 = 0x3210; //Convert Channels 0,1,2,3;0=ib,1=ia,2=signal,3=vdc
*CHSELSEQ2 = 0x7654; //Convert Channels 4,5,6,7
*ADCTRL2 = 0x4000; //复位通道指针。
}
/* --------------------------------------------------------- */
/* I/O口初始化
I/O口设置, 输出口:IOPF4(RAM_CE)、IOPF5(RAM_OE)、IOPB4(BUCK CONTROL)
输入口:IOPF6(RAM_BUSY)
保护动作:XINT1(ITRIP)
捕获单元:编码器(XINT2、QEP3、QEP4)、霍尔信号(CAP1、CAP2、CAP3)
PWM设置: 电机全桥控制-PWM1-PWM6
/* --------------------------------------------------------- */
void io_init()
{
*MCRA = 0xFFFF; //PWM1-6,SCI,CAP1-3,T1PWM
*MCRB = 0xFF9F; //spi,can, spiste--IOPC5
*MCRC = 0xFFFF; //CLKOUT,PWM7--PWM12,CAP4--6,
*PADATDIR = 0x0000;
*PBDATDIR = 0x0000;
*PCDATDIR = 0x0000; //没有必要置1,SET IOPC5--OUT 1
*PDDATDIR = 0x0000;
*PEDATDIR = 0x0000;
*PFDATDIR = 0x0000; //F4,F5--OUTPUT. F6--INPUT
}
/* ----------------------------------------------------------- */
/* SPI 接口初始化 */
/* ----------------------------------------------------------- */
void spi_init()
{
*SPICCR = 0x000f; //设置数据长度为16位,复位SPI
*SPICTL = 0x000e; //主工作模式,正常的SPI时钟方式,允许发送
*SPIBRR = 0x007f; //Set up the SPI to 250k speed.
*SPICCR = 0x008f; //启动SPI时钟.
}
/* ---------------------------------------------------------- */
/* EVA & EVB 初始化 */
/* ---------------------------------------------------------- */
void ev_init()
{
*EVAIMRA = 0x0080; //开T1周期
*EVAIMRB = 0x0000;
*EVAIMRC = 0x0007; //
*EVAIFRA = 0xFFFF; //清中断标志
*EVAIFRB = 0xFFFF;
*EVAIFRC = 0xFFFF;
*GPTCONA = 0x0041; //低有效,同相驱动
*T1PR = 0x03E8; //T1周期50微秒
*T1CNT = 0x0000;
*ACTRA = 0x0999; //上桥低有效,下桥高有效,这里必须这样设置
*DBTCONA = 0x0FE8; //DEADTIME=16*4*25nS=1.6uS
*COMCONA = 0x8A00;
*T1CMPR = 0x0258; //0.6
*T1CON = 0x0802; //Disable timer,X
*CMPR1 = 0x01F4; //占空比为0,值250,双极性
*CMPR2 = 0x01F4;
*CMPR3 = 0x01F4;
*T2CON = 0x1870; //连续增,CAP1--3
*T2PR = 0xFFFF;
*T2CNT = 0x0000;
// *EVBIMRA = 0x0000;
// *EVBIMRB = 0x0000;
// *EVBIMRC = 0x0000;
// *EVBIFRA = 0xFFFF;
// *EVBIFRB = 0xFFFF;
// *EVBIFRC = 0xFFFF;
// *GPTCONB = 0x0000;
*T4CON = 0x1870; //定向增减记数,qep
*T4PR = 0xFFFF;
*T4CNT = 0x0;
*CAPCONB = 0x0000; //Enable QEP
}
/* ---------------------------------------------------------- */
/* CAP 初始化
/* ---------------------------------------------------------- */
void cap_init()
{
*CAPCONA=0x30ff; //使能捕获单元,选T2,捕获双沿
//清捕获寄存器单元
*CAP1FBOT=*CAP1FBOT;
*CAP1FBOT=*CAP1FBOT;
*CAP2FBOT=*CAP2FBOT;
*CAP2FBOT=*CAP2FBOT;
*CAP3FBOT=*CAP3FBOT;
*CAP3FBOT=*CAP3FBOT;
*CAPFIFOA=0x1500; //防止出现丢脉冲的现象
*CAPCONB=0; //使能捕获单元4,5,选T4,捕获上升沿
}
/* ---------------------------------------------------------- */
/* SCI 串口初始化 */
/* ---------------------------------------------------------- */
void sci_init()
{
*SCICCR = 0x0007; //不使能奇偶校验
*SCICTL1 = 0x0003; //使能接收和发送,
*SCICTL2 = 0x0002; //使能接收中断
*SCIHBAUD = 0x0002;
*SCILBAUD = 0x0007; //9600,system clk=40M
*SCICTL1 = 0x0023;
*SCIPRI = 0x0020; //LOW
}
/* ---------------------------------------------------------- */
/* XINT 外部中断初始化 */
/* ---------------------------------------------------------- */
void xint_init()
{
*XINT1CR = 0x0000;
*XINT2CR = 0x0000;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -