本帖最后由 dong_abc 于 2011-5-2 22:15 编辑
发现很多宅男宅女,出去活动活动吧。
整理了一下代码,发个M0裸奔的小系统,文件有点多,来个主文件和系统节拍文件
/*******************************************************************
main.c file
作者:dong_abc
建立日期: 2011.05.01(2011年劳动节)
修改日期:
版本:V1.0
版权自由,欢迎盗版
Copyright(C) Anybody of Nuvoton MCU lover
All rights reserved
********************************************************************/
#include "main.h"
/********************************************************************
函数功能:系统初始化。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void Sys_Init(void)
{
UNLOCKREG(); // 芯片注册解锁
SYSCLK->WRCON.XTL12M_EN = 1; // 设定12M外部晶振
DrvSYS_Delay(5000); // 等待时钟就绪
SysTick_Init(); // 系统节拍及中断初始化配置
Timer0_Init(); // 定时器初始化配置
Uart_Init(); // 串口初始化配置
ADC_Init(); // ADC初始化配置
Seg7_Init(); // 数码管初始化配置
Key_Init(); // 按键初始化配置
}
/********************************************************************
函数功能:20ms弱实时回调处理函数。
入口参数:无。
返 回:无。
备 注:盗版农民讲习所的《建立MCU通用处理程序》。
本来要做成芯唐库里类似的回调函数,那种固定模式非常好,只是
n个名字类似的指针变量和函数实在让人晕
********************************************************************/
void Weekness_20msCallback(void)
{
Key_Proc();
}
/********************************************************************
函数功能:5ms弱实时回调处理函数。
入口参数:无。
返 回:无。
备 注:盗版农民讲习所的《建立MCU通用处理程序》。
********************************************************************/
void Weekness_5msCallback(void)
{
Seg7_Fresh();
}
/********************************************************************
函数功能:系统主函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
int main (void)
{
Sys_Init();
SysTimer_WeeknessRegister( Weekness_20msCallback, Weekness_5msCallback );
while(1)
{
}
}
//SysTick.c file
#include "SysTick.h"
//系统系统节拍计数器变量及弱实时任务函数指针
struct InSysTimer {
void ( *Weekness_20ms )(); //20ms弱实时任务函数指针
void ( *Weekness_5ms )(); //5ms弱实时任务函数指针
uint32_t SysTickCnt; //系统节拍计数器
};
struct InSysTimer sInSysTimer;
/********************************************************************
函数功能:系统节拍及中断初始化配置。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void SysTick_Init(void)
{
SysTick_Config(12000000/(100*2)); //5ms系统节拍中断
}
/********************************************************************
函数功能:系统节拍中断函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void SysTick_Handler(void)
{
sInSysTimer.SysTickCnt++;
//500ms时钟节拍
if(sInSysTimer.SysTickCnt%100==0)
{
//系统运行指示灯
//outpw((uint32_t)&GPIOA->DOUT, inpw((uint32_t)&GPIOA->PIN) ^ (1 << 5));
outpw((uint32_t)&GPIOA->DOUT, inpw((uint32_t)&GPIOA->PIN) ^ 0x007c);
sInSysTimer.SysTickCnt=0;
}
//20ms弱实时任务函数
if(sInSysTimer.SysTickCnt%4==0)
{
if(sInSysTimer.Weekness_20ms) (*sInSysTimer.Weekness_20ms)();
}
//10ms弱实时任务
if(sInSysTimer.SysTickCnt%2==0)
{
}
//5ms弱实时任务函数
if(sInSysTimer.Weekness_5ms) (*sInSysTimer.Weekness_5ms)();
}
/********************************************************************
函数功能:注册弱实时任务处理函数。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void SysTimer_WeeknessRegister( void(*Function_20ms)(), void(*Function_5ms)() )
{
sInSysTimer.Weekness_20ms = Function_20ms;
sInSysTimer.Weekness_5ms = Function_5ms;
}
NUC1xx_Demo_V1.0.rar
(436.19 KB)
|