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

📄 controller.h

📁 基于DSP2000的例程
💻 H
字号:
#include "register.h"       			    // 引用头部文件 
#include "ioports.h"

void sytem_initial();						// 声明在程序中需要用到的函数
void pwm_initial();                         // pwm初始化函数 
void sci_initial();                         // sci初始化函数 
void io_initial();                          // io 初始化
void s_switch();                            // 模拟输入切换函数 
void sci_send();                            // sci发送函数
void delay(int k);                          // 延迟函数
int  s_flag=1;                              // 模拟输入通道标志位         
int  sci_data=0;                            // sci发送数据
main() 
{   
    int i;
	sytem_initial();						// 系统初始化程序
	io_initial();							// IO初始化
    pwm_initial();					    	// PWM初始化程序 
    sci_initial();                          // sci初始化程序     
	asm(" clrc INTM");				    	// 中断使能
    while(1)
    {   
        delay(10000);         
        sci_send();                     
    }
}

void sytem_initial()
{
    asm(" setc INTM");                  // 禁止所有中断
	asm(" setc SXM");                   // 符号扩展有效
	asm(" clrc OVM");                   // 结果正常溢出
	asm(" clrc CNF");                   // 双端口RAM映射到数据存储空间
    *SCSR1=0x834E;                      // LOCK引脚输出CPU时钟,IDLE1模式
                                        // 2倍频,禁止ADC,CAN,SPI,使能EVA,EVB,SCI  
    *WDCR=0x00E8;                       // 禁止看门狗 
    *XINT1CR=0X8007;                    // 外部中断1使能,低优先级, 下降沿产生中断
	*IMR=0x00FF;						// 开所有中断 
	*IFR=0xFFFF;						// 清中断标志位  		
}
   
void  pwm_initial()
{  
	*MCRA=*MCRA|0X0FC7;	    	// 配置为基本功能方式,PWM1-6,SCI,INT1
	*MCRC=*MCRC|0X007F;	    	// 配置为基本功能方式,PWM7-12   
	*ACTRA=0X0666;				// PWM1,3,5高有效,2,4,6低有效
	*ACTRB=0X0666;				// PWM7,9,11高有效,8,10,12低有效
	*DBTCONA=0X0000;			// 不使能死区控制	
	*DBTCONB=0X0000;			// 不使能死区控制  
	*CMPR1=0X2000;              // 设置比较寄存器
	*CMPR2=0X5000;
	*CMPR3=0X8000;	
	*CMPR4=0X3000;
	*CMPR5=0X6000;
	*CMPR6=0X9000;             
	*T1PER=0XA000;				// 设置定时器1的周期寄存器
	*T3PER=0XA000;				// 设置定时器3的周期寄存器     
	*COMCONA=0X8200;			// 使能比较操作	
	*COMCONB=0X8200;			// 使能比较操作  
	*T1CON=0X9540;				// 定时器1为连续增计数模式, 使能定时器1,1 分频	
	*T3CON=0X9540;				// 定时器3为连续增计数模式, 使能定时器3,1 分频                                    
    *EVAIFRA=0XFFFF ;           // 清EVA中断标志
    *EVAIMRA=0XFFFF;            // 使能所有EVA中断   
    *EVBIFRA=0XFFFF;            // 清EVB中断标志
    *EVBIMRA=0XFFFF;            // 使能所有EVB中断
}   

void sci_initial()
{   
    *MCRA=*MCRA|0X0003;	            	// 配置为SCI 引脚功能
    *SCICCR=0X0007;                     // 一个停止位,禁止校验,禁止自测试,
                                        // 空闲线模式,8位字符长度   
    *SCICTL1=0X0003;                    // 禁止接收错误中断,软件复位,没有选定的发送特征                
                                        // 禁止休眠方式,使能发送和接收
    *SCICTL2=0X0002;                    // 禁止发送中断,使能接收中断                
    *SCIHBAUD=0X0002;
    *SCILBAUD=0X0008;                   // 波特率9600    
    *SCIPRI=0X0008;                     // 高优先级中断,不受仿真挂起影响 
    *SCICTL1=0X0023;                    // 脱离复位状态  
}
  

void sci_send()
{
    *SCITXBUF=sci_data; 
    sci_data++;      
}
	
  
void delay(k)
{
    for(;k>0;k--);
}   


void interrupt pwm_interrupt()           // pwm 和sci中断入口程序
{   

    *EVAIFRA=0XFFFF;                      // 清EVA中断标志
    *EVBIFRA=0XFFFF;                      // 清EVB中断标志  
    asm(" clrc INTM");	 
    return;
}  

void interrupt sci_interrupt()
{   
    
    if(((*PIVR)==0X0006)&&((*SCIRXST&0X0040)==0X0040)) 
    {                               // SCI 接收中断               
		*CANMDER=0X0000;       		// 邮箱不使能
	    *CANMCR=*CANMCR|0X0100;    	// CDR=1,数据改变请求
	    *CANMBX3A=*SCIRXBUF;	    // 更新邮箱3中的数据
	    *CANMBX3B=*SCIRXBUF;
	    *CANMCR=0X2680;				// 数据字节0...7,正常工作模式
	    *CANMDER=0X004C;   			// 邮箱3发送, 邮箱2接收,使能邮箱2,3 	          
    }     
    asm(" clrc INTM");	 
    return;
} 

void io_initial()
{  
    *MCRB=*MCRB & 0XFFE3;	    	    // iopc2,3,4 配置为io 口.  
    *MCRC=*MCRC & 0XE0FF;	    	    // iopf0,1,2,3,4 配置为io 口.
    *PCDATDIR=0X7878; 
    *PFDATDIR=0X1F1F;      
}
 

void interrupt xint_interrupt()         // 外部中断入口程序
{  
	asm(" clrc INTM");	 
    return;
}
   
void interrupt nothing()				// 假中断程序
{    
	asm(" clrc INTM");	 
    return;
}

⌨️ 快捷键说明

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