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

📄 motortest.c

📁 F2812的串口通信
💻 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 + -