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

📄 gpio.c

📁 利用DSP的功能引脚产生6个PWM波
💻 C
字号:
#include "DSP28_Device.h"

// void Delay(long z);
void InitSysCtrl(void);
void IntiGpio(void);
void InitPieCtrl(void);
void InitPieVectTable(void);
void InitCpuTimers(void);
void ConfigCpuTimer(struct CPUTIMER_VARS *timer,float Freq,float Period);
interrupt void cpu_timer0_isr(void);

void main(void)
{
	unsigned int i;
	
	// LED显示设置
	unsigned int LED[8]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080};
	
	// 清CPU中断
	DINT;
	IER=0x0000;
	IFR=0x0000;
//	EINT;
	
	// 系统初始化
	InitSysCtrl();
	
	// 初始化通用输入输出口GPIO
	InitGpio();
	
	// 初始化PIE
	InitPieCtrl();
	
	// 初始化中断向量表
	InitPieVectTable();
	
	// 对PIE向量表中的定时器Timer0的中断入口向量进行重新映射(赋值)
	EALLOW;
	PieVectTable.TINT0=&cpu_timer0_isr;
	EDIS;
		
	// 初始化定时器Timer0
	InitCpuTimers();
	
	// 将CPU定时器Timer0配置成每隔50ms中断一次,CPU主频为150MHz,定时器的周期为50000us
	ConfigCpuTimer(&CpuTimer0,150,50000);
	
	// 使能PIE中的TINT0中断
	PieCtrl.PIEIER1.bit.INTx7=1;
	
	// 使能和定时器Timer0中断相连的CPU中断
	IER=0x0001;
	EINT;  // 使能全局中断位
	ERTM;  // 使能全局实时调试中断DBGM
	
	// 启动CPU定时器Timer0
	CpuTimer0Regs.TCR.bit.TSS=0;
	
			
	while(1)
	{
		for(i=0;i<16;i++)
		{
			if(i<8)  GpioDataRegs.GPADAT.all=LED[i];
			else     GpioDataRegs.GPADAT.all=LED[15-i];
		// Delay((long)50000*(long)(GpioDataRegs.GPADAT.all>>8)+1000);
		while(CpuTimer0.InterruptCount<3);  // 等待直到定时器0的中断服务被调用了3次
		CpuTimer0.InterruptCount=0;         // 将中断计数器清零
		}
		
		
	}
	
}

/*void Delay(long z)
{
	long i;
	for(i=0;i<z;i++) {}
}
*/

interrupt void cpu_timer0_isr(void)
{
	CpuTimer0.InterruptCount++;
	
	// 对该中断作出应答,从而能够响应分组1中的其他中断
	PieCtrl.PIEACK.all=PIEACK_GROUP1;   // 清除PIE分组1的中断响应位
}

⌨️ 快捷键说明

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