📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: zhangmingjie
** Created date: 2007-3-26
** Version: 1.0
** Descriptions: 双边沿PWM输出实验。
**------------------------------------------------------------------------------------------------------
** Modified by: wuzhijian
** Modified date: 2007-09-03
** Version:
** Descriptions: 对程序的风格以及注释略作调整,并检查代码。
**
** Rechecked by: Litiantian
********************************************************************************************************/
#include "config.h"
#define tmp1 Fpclk / 100
/*********************************************************************************************************
** 函数名称: IO_Init
** 函数功能: 初始化I/O口,设P3.17、P1.6、P1.11为双边沿输出
** 入口参数: 无
** 出口参数: 无
*********************************************************************************************************/
void IO_Init(void)
{
PINSEL7 = (PINSEL7 & (~(0x03 << 2))) | (0x02 << 2); // P3.17连接到PWM0.2(PWM2)
PINSEL2 = (PINSEL2 & (~(0x03 << 12))) | (0x03 << 12); // P1.6连接到PWM0.4(PWM4)
PINSEL2 = (PINSEL2 & (~(0x03 << 22))) | (0x03 << 22); // P1.11连接到PWM0.6(PWM6)
}
/*********************************************************************************************************
** 函数名称: PWM_Dbl_Init
** 函数功能: 初始化双边沿PWM输出。
** 入口参数: 无
** 出口参数: 无
*********************************************************************************************************/
void PWM_Dbl_Init(void)
{
uint32 tmp;
tmp = Fpclk / 100;
PWM0PR = 0x09; // 对Fpclk进行分频,PWM计数频率为Fpclk的1/10
PWM0MCR = 0x02; // PWMMR0与PWMTC匹配时复位PWMTC
PWM0PCR = (1 << 2) | // PWM2双边沿控制
(1 << 4) | // PWM4双边沿控制
(1 << 6) | // PWM6双边沿控制
(1 << 10) | // 使能PWM2输出
(1 << 12) | // 使能PWM4输出
(1 << 14); // 使能PWM6输出
PWM0MR0 = tmp; // PWM速率控制/计数初值
/* 设置双边沿脉冲的脉宽和位置 */
PWM0MR1 = 0; // PWM2的置位位置
PWM0MR2 = (tmp / 8) * 7; // PWM2的复位位置
PWM0MR3 = (tmp / 8) * 2; // PWM4的置位位置
PWM0MR4 = (tmp / 8) * 6; // PWM4的复位位置
PWM0MR5 = (tmp / 8) * 3; // PWM6的置位位置
PWM0MR6 = (tmp / 8) * 5; // PWM6的复位位置
PWM0LER = 0x7F; // 锁存所有PWM匹配值
PWM0TCR = 0x02; // 复位PWMTC
PWM0TCR = 0x09; // 使能PWM
}
/*********************************************************************************************************
** 函数名称: main
** 函数功能: 演示双边沿PWM现象。
** 入口参数: 无。
** 出口参数: 为0时表明函数出错。
** 函数说明: 需要用多通道示波器或者逻辑分析仪进行观察
*********************************************************************************************************/
int main(void)
{
IO_Init(); // 初始化I/O口,设置P1.11、P1.6、P3.17为双边沿输出
PWM_Dbl_Init(); // 初始化双边沿PWM输出,设好了相关寄存器之后,相应的管脚就有相应的双边沿的PWM输出
while (1);
return (0);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -