📄 motortest.c
字号:
#include "stdio.h"
#include "F2812reg.h"
#include "device.h"
#pragma DATA_SECTION(PieVectTable,"PieVectTable");
struct PIE_VECT_TABLE PieVectTable;
void initcpu()
{
asm(" EALLOW");
WDCR=0x068; //禁止看门狗
PLLCR=0x000A; //CPU时钟为OSCCLK*10/2=60M
PCLKCR=0x5D0B; //外设时钟使能
HISPCP=0x0000; //配置外设时钟HSPCLK=60M/1=60M
LOSPCP=0x0001; //配置外设时钟LSPCLK=60M/2=30M
asm(" EDIS");
}
void initgpio()
{
asm(" EALLOW");
GPFMUX=0x003f; //配置GPIOF中的SCI,SPI口为外设模式
asm(" EDIS");
}
void initpiectrl()
{
asm(" EALLOW");
PIECTRL=0x0001; //配置PIE向量表
PIEIFR1=0x00;
PIEIER1=0x08; //INT1.4使能
// PIEIFR2=0x00;
// PIEIER2=0x10; //INT2.4使能
XINT1CR=0x05; //上升沿中断
asm(" EDIS");
}
/*******************************************************/
initevbpwm()
{
// EVAIFRC=0xFFFF;
// EVAIMRC=0x0001; //允许定时器1周期中断
asm(" EALLOW");
SCICCRA=0x0007; //一个停止位,无校验,8位字符
SCICTL1A=0x0003; //使能发送与接收
SCICTL2A=0x0000; //禁止RXRDY,TXRDY中断
SCIHBAUDA=0x01;
SCILBAUDA=0x086; //波特率为9600
SCICTL1A=0x0023;
CAPFIFOA=0x0000;
CAPCONA=0x2240;
T1CNT=0x0000; //从0开始计数
T1PR=0xffff; //设置周期值
//T1CON=0x9040; //连续增计数
asm(" EDIS");
}
/***********************************************************/
void delay() //延时1.5ms 等待LM629完全复位
{
Uint16 i;
for (i=0;i<299;i++)
{ asm(" RPT #255 || NOP"); }
}
/********************************************************/
void check_busy() //检查busy位
{
char st;
loop: st=rd_st();
if((st&0x01)==1)
{goto loop;}
}
/*****************************************************************/
void wr_data(data8) //写数据
unsigned char data8;
{ Uint16 wk1,wk2,wk3,wk;
wk1=data8;
wk2=wk1&0x03;
wk3=(wk1>>2)&0x3f;
wk=(wk3<<10|wk2<<6)|0x18;
asm(" EALLOW");
GPADIR=0xfcfc; //PS,CS,RD,WR为输出,数据线为输出
GPADAT=0x1c; //CS=0,WR输出1,PS输出1
delay30ns();
GPADAT=0x18; //WR输出0,PS输出1
delay100ns();
GPADAT=wk;
delay100ns();
GPASET=0x04; //WR输出1
asm(" EDIS");
}
/*****************************************************************/
unsigned char rd_data() //读数据
{
Uint16 sk0,sk2,sk3,sk;
unsigned char data8;
asm(" EALLOW");
GPADIR=0x3c; //PS,CS,RD,WR为输出,数据线为输入
GPADAT=0x1c; //CS=0,RD输出1,PS输出1
delay30ns();
GPADAT=0x0c; // RD输出0,PS输出1
delay100ns();
sk0=GPADAT;
GPASET=0x10; // RD输出1,
sk2=(sk0>>6)&0x03;
sk3=(sk0>>10)&0x3f;
sk=(sk3<<2)|sk2;
data8=sk;
asm(" EDIS");
return(data8);
}
main()
{
Uint16 i,j;
asm(" EALLOW");
asm(" CLRC DBGM");
asm(" SETC OVM");
asm(" SETC SXM");
// asm(" SETC INTM");
asm(" SETC OBJMODE");
asm(" SETC VMAP");
asm(" EDIS");
asm(" EALLOW");
initcpu();
initgpio();
asm(" EDIS");
asm(" EALLOW");
asm(" AND IFR,#00H");
asm(" OR IER,#01H"); //使能INT1中断
asm(" EDIS");
asm(" EALLOW");
initpiectrl();
InitPieVectTable();
initevbpwm();
asm(" EDIS");
asm(" EALLOW");
PieVectTable.XINT1=&XINT1_ISR;
asm(" EDIS");
for (i=0;i<99;i++) //延时2.8秒,找起始位置
for (j=0;j<6000;j++)
{ asm(" RPT #255 || NOP"); }
for (i=0;i<340;i++) //延时5-6秒,找起始位置
for (j=0;j<6000;j++)
{ asm(" RPT #255 || NOP"); }
for (i=0;i<100;i++)
for (j=0;j<6000;j++) //反转5.2度后延时2-3秒等待摆动
{ asm(" RPT #255 || NOP"); }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -