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

📄 dc.c

📁 DSP2407程序
💻 C
字号:
//###########################################################################
//
// FILE:    DC.C
//
// TITLE:   DSP2812 Event Manager create PWM to control a DC motor.
//
// DATE:    2007.04.20
//
// AUTHOR:  ksy
//
// COMPANY: ******Technology Co.,Ltd
//
// DESCRIPTION:
//
//          This program sets up the EVA timers (TIMER1) to generate
//          PWM1-4 waveforms to control a DC motor  
//			按键A正转;按键B反转
//###########################################################################

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File
#include "float.h"

#define uchar	unsigned char
#define uint	unsigned int

//#define GpioDataRegs.GPADAT.bit.GPIOA8   rs
//#define GpioDataRegs.GPADAT.bit.GPIOA9   rw
//#define GpioDataRegs.GPADAT.bit.GPIOA10  ep
//************************
//#define ((GpioDataRegs.GPADBT.all)&0xff00) p2



// Prototype statements for functions found within this file.
//interrupt void eva_timer1_isr(void);  //怎样跳转过来的??
void init_eva(void);
void InitAdc();
void delay_loop();

// Initialize Global variables
Uint16 IntCount;



uchar  dis1[] = {"0123456789abc"};
uchar  dis2[] = {"iloveyoujia"};

void delay1(Uint16 ms)
{ Uint16 i,j;
 for(i=0;i<ms;i++)
 for(j=0;j<1000;j++){;}
 }

delay(Uint16 ms)
{							// 延时子程序
	Uint16 t;
	while(ms--)
	{
		for(t = 0; t< 1000; t++)
		{
			asm(" NOP ");  //为什么不能连续使用嵌汇编
			asm(" NOP ");
			asm(" NOP ");
			asm(" NOP ");
		}
	}
}

//***********************
lcd_bz()
{	
    uchar result;
    result=0x00;						// 测试LCD忙碌状态
	GpioDataRegs.GPADAT.bit.GPIOA8 = 0;  //rs
	GpioDataRegs.GPADAT.bit.GPIOA9= 1;    //rw
	GpioDataRegs.GPADAT.bit.GPIOA10 = 1;  //ep
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	result = GpioDataRegs.GPBDAT.bit.GPIOB15;
	
	GpioDataRegs.GPADAT.bit.GPIOA10 = 0;  //ep
	return result;	
}
//***************************

lcd_wcmd(Uint16  cmd)
{							// 写入指令数据到LCD
	while(lcd_bz());
	GpioDataRegs.GPADAT.bit.GPIOA8 = 0;  //rs
	GpioDataRegs.GPADAT.bit.GPIOA9= 0;    //rw
	GpioDataRegs.GPADAT.bit.GPIOA10 = 0;  //ep
 	asm(" NOP ");
	asm(" NOP ");	
	(GpioDataRegs.GPADAT.all) =(cmd<<8);  //右移8位
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	GpioDataRegs.GPADAT.bit.GPIOA10 = 1;   //ep
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	GpioDataRegs.GPADAT.bit.GPIOA10 = 0;	//ep	
}
//************************************
lcd_pos(uchar pos)
{							//设定显示位置
	lcd_wcmd(pos | 0x80);
}
//***********************************

lcd_wdat(Uint16 dat)	
{							//写入字符显示数据到LCD
	while(lcd_bz());
	GpioDataRegs.GPADAT.bit.GPIOA8 = 1;  //rs
	GpioDataRegs.GPADAT.bit.GPIOA9= 0;    //rw
	GpioDataRegs.GPADAT.bit.GPIOA10 = 0;  //ep
	(GpioDataRegs.GPADAT.all) =(dat<<8);  //右移8位
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	GpioDataRegs.GPADAT.bit.GPIOA10 = 1;  //ep
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	asm(" NOP ");
	GpioDataRegs.GPADAT.bit.GPIOA10 = 0;  //ep	
}
//*************************************
lcd_init()
{							//LCD初始化设定
	lcd_wcmd(0x38);			//
	delay(1);
	lcd_wcmd(0x0c);			//
	delay(1);
	lcd_wcmd(0x06);			//
	delay(1);
	lcd_wcmd(0x01);			//清除LCD的显示内容
	delay(1);
}




void main(void)
{
 uchar i;
// Initialize System Control:
   InitSysCtrl();
   EALLOW;
   SysCtrlRegs.HISPCP.all=0x03;// HSPCLK=SYSCLKOUT/2*3=150/(2*3)=25MHz(AD clock)
   EDIS;                       //高速外围时钟定标寄存器
 
// Initalize GPIO: 
   EALLOW;    
   GpioMuxRegs.GPAMUX.all = 0x00FF; // EVA PWM 1-6 pins
   //GpioMuxRegs.GPBMUX.bit.CAP4Q1_GPIOB8=0; // A
   //GpioMuxRegs.GPBMUX.bit.CAP5Q2_GPIOB9=0; // B
   GpioMuxRegs.GPBDIR.all = 0x0;           // set IO pins to be input pins
   EDIS;
    
// Disable CPU interrupts 
   DINT;     //DINT==asm("setc INTM ")

// Initialize PIE control registers.
   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;   //只能进行逻辑操作!!

// Initialize the PIE vector table.
//*************************
   InitPieVectTable();     //怎样解读?
//***************************
   //EALLOW;  // This is needed to write to EALLOW protected registers
  // PieVectTable.T1PINT = &eva_timer1_isr;  //用户自定义的中断函数,指明了中断跳转
  // EDIS;   // This is needed to disable write to EALLOW protected registers
//************************************
// Initialize EVA、SCI-A、ADC:
   init_eva();
   
  
	lcd_init();				// 初始化LCD			
	delay(10);
	lcd_pos(00);				// 设置显示位置为第一行的第5个字符
	i = 0;
	while(dis1[i] != '\0')
	{						// 显示字符hificat.com
		lcd_wdat(dis1[i]);
		i++;
	}
	lcd_pos(0x40);			// 设置显示位置为第二行第二个字符
	i = 0;
	while(dis2[i] != '\0')
	{
		lcd_wdat(dis2[i]);	// 显示字符" 0571-85956028 
		i++;
	}
   
   for(;;){;}
}   
  

void init_eva()
{
// Initalize EVA Timer1&Configure PWM1-PWM4
	EvaRegs.T1PR = 1250;           // Timer1 period=1250/25M=50us
	EvaRegs.T1CNT =0;             // Timer1 counter
	//EvaRegs.GPTCONA.bit.T1CMPOE=1; // enable timer compare
	//EvaRegs.GPTCONA.bit.T1PIN=1;   // timer compare output,通用定时器1极性选择,低有效
    //EvaRegs.EVAIMRA.bit.T1PINT = 1;// enable Timer1 period interrupt,通用定时器1,周期中断使能
//	EvaRegs.EVAIFRA.bit.T1PINT=1;  // clear Timer1 period interrupt flag
/****************************************************
  TMODE = continuous up count
  Input clock prescaler= X/1 (X=HSPCLK)=25MHz
  Timer enable ; Timer compare enable  
*****************************************************/
	EvaRegs.T1CON.all = 0x1042;   //P152,位6,TENABLE=1
//**********************************	
  // Enable compare for PWM1-PWM4
	EvaRegs.CMPR1 = 1000;
	EvaRegs.CMPR2 = 1000;  //不明寄存器?
//***********************************
	EvaRegs.ACTRA.all = 0x0F99;   // PWM1,2(11):forced high; PWM3,4(00):forced low//有问题?
	EvaRegs.DBTCONA.all = 0x0; // 死区1us (1/(150M/32))*5
	EvaRegs.COMCONA.all = 0xA6F0; // Enable full compare 1010 0110 0000 0000
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -