- 打卡等级:偶尔看看III
- 打卡总天数:54
- 最近打卡:2025-05-01 09:07:55
管理员
- 积分
- 15609
|
发表于 2025-4-13 21:56:35
|
显示全部楼层
////////////////////////////////////////
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
// 1. (2025-04-13) 创建文件
////////////////////////////////////////
#include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
SYS_Init();
while (1)
{
}
}
////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
EnableAccessXFR(); //使能访问扩展XFR
AccessCodeFastest(); //设置最快速度访问程序代码
AccessIXramFastest(); //设置最快速度访问内部XDATA
IAP_SetTimeBase(); //设置IAP等待参数,产生1us时基
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式
CLK_Init(); //时钟模块初始化
PORT0_Init(); //P0初始化
PORT1_Init(); //P1初始化
PORT2_Init(); //P2初始化
PORT3_Init(); //P3初始化
PORT4_Init(); //P4初始化
PORT5_Init(); //P5初始化
EnableGlobalInt(); //使能全局中断
}
////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
uint16_t i;
do
{
i = MAIN_Fosc / 6000;
while (--i);
} while (--ms);
}
////////////////////////////////////////
// 端口3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_ISR(void) interrupt P3INT_VECTOR
{
uint8_t intf;
intf = CheckP3nFlag(BIT_ALL); //读取中断请求标志
ClearP3nFlag(BIT_ALL); //清除中断请求标志
}
////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{
CLK_SYSCLK_Divider(10); //切换主时钟前先将系统时钟降频
HIRC_40M(); //选择内部预置的频率
CLK_MCLK_HIRC(); //选择内部高精度HIRC作为主时钟
CLK_MCLK2_BYPASS(); //旁路MCLK2,直接使用MCLK选择
CLK_SYSCLK_Divider(1); //设置系统时钟分频系数
CLK_HSIOCK_MCLK(); //选择MCLK主时钟作为高速外设时钟源
CLK_HSIOCK_Divider(1); //设置高速外设时钟预分频系数
CLK_SPICLK_Divider(1); //设置SPI时钟预分频系数
CLK_I2SCLK_Divider(1); //设置I2S时钟预分频系数
CLK_PWMACLK_Divider(1); //设置PWMA时钟预分频系数
CLK_PWMBCLK_Divider(1); //设置PWMB时钟预分频系数
CLK_TFPUCLK_Divider(1); //设置TFPU时钟预分频系数
}
////////////////////////////////////////
// P0口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT0_Init(void)
{
SetP0nQuasiMode(BIT_ALL); //设置P0为准双向口模式
DisableP0nPullUp(BIT_ALL); //关闭P0内部上拉电阻
DisableP0nPullDown(BIT_ALL); //关闭P0内部下拉电阻
DisableP0nSchmitt(BIT_ALL); //使能P0施密特触发
SetP0nSlewRateNormal(BIT_ALL); //设置P0一般翻转速度
SetP0nDrivingNormal(BIT_ALL); //设置P0一般驱动能力
SetP0nDigitalInput(BIT_ALL); //使能P0数字信号输入功能
}
////////////////////////////////////////
// P1口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT1_Init(void)
{
SetP1nQuasiMode(BIT_ALL); //设置P1为准双向口模式
DisableP1nPullUp(BIT_ALL); //关闭P1内部上拉电阻
DisableP1nPullDown(BIT_ALL); //关闭P1内部下拉电阻
DisableP1nSchmitt(BIT_ALL); //使能P1施密特触发
SetP1nSlewRateNormal(BIT_ALL); //设置P1一般翻转速度
SetP1nDrivingNormal(BIT_ALL); //设置P1一般驱动能力
SetP1nDigitalInput(BIT_ALL); //使能P1数字信号输入功能
}
////////////////////////////////////////
// P2口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT2_Init(void)
{
SetP2nQuasiMode(BIT_ALL); //设置P2为准双向口模式
DisableP2nPullUp(BIT_ALL); //关闭P2内部上拉电阻
DisableP2nPullDown(BIT_ALL); //关闭P2内部下拉电阻
DisableP2nSchmitt(BIT_ALL); //使能P2施密特触发
SetP2nSlewRateNormal(BIT_ALL); //设置P2一般翻转速度
SetP2nDrivingNormal(BIT_ALL); //设置P2一般驱动能力
SetP2nDigitalInput(BIT_ALL); //使能P2数字信号输入功能
}
////////////////////////////////////////
// P3口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_Init(void)
{
SetP3nQuasiMode(BIT_ALL); //设置P3为准双向口模式
EnableP3nPullUp(0x3c); //使能P3.5,P3.4,P3.3,P3.2内部上拉电阻
DisableP3nPullUp(0xc3); //关闭P3.7,P3.6,P3.1,P3.0内部上拉电阻
DisableP3nPullDown(BIT_ALL); //关闭P3内部下拉电阻
DisableP3nSchmitt(BIT_ALL); //使能P3施密特触发
SetP3nSlewRateNormal(BIT_ALL); //设置P3一般翻转速度
SetP3nDrivingNormal(BIT_ALL); //设置P3一般驱动能力
SetP3nDigitalInput(BIT_ALL); //使能P3数字信号输入功能
SetP3nFallingInt(0x04); //设置P3.2为下降沿中断
SetP3nRisingInt(0x08); //设置P3.3为上升沿中断
SetP3nLowLevelInt(0x20); //设置P3.5为低电平中断
SetP3nHighLevelInt(0x10); //设置P3.4为高电平中断
SetP3nIntWaieup(0x3c); //使能P3.5,P3.4,P3.3,P3.2唤醒STOP模式
EnableP3nInt(0x3c); //使能P3.5,P3.4,P3.3,P3.2口中断
SetP3IntPriority(0); //设置中断为最低优先级
}
////////////////////////////////////////
// P4口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT4_Init(void)
{
SetP4nQuasiMode(BIT_ALL); //设置P4为准双向口模式
DisableP4nPullUp(BIT_ALL); //关闭P4内部上拉电阻
DisableP4nPullDown(BIT_ALL); //关闭P4内部下拉电阻
DisableP4nSchmitt(BIT_ALL); //使能P4施密特触发
SetP4nSlewRateNormal(BIT_ALL); //设置P4一般翻转速度
SetP4nDrivingNormal(BIT_ALL); //设置P4一般驱动能力
SetP4nDigitalInput(BIT_ALL); //使能P4数字信号输入功能
}
////////////////////////////////////////
// P5口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT5_Init(void)
{
SetP5nQuasiMode(BIT_ALL); //设置P5为准双向口模式
DisableP5nPullUp(BIT_ALL); //关闭P5内部上拉电阻
DisableP5nPullDown(BIT_ALL); //关闭P5内部下拉电阻
DisableP5nSchmitt(BIT_ALL); //使能P5施密特触发
SetP5nSlewRateNormal(BIT_ALL); //设置P5一般翻转速度
SetP5nDrivingNormal(BIT_ALL); //设置P5一般驱动能力
SetP5nDigitalInput(BIT_ALL); //使能P5数字信号输入功能
}
|
|