📄 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: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: zhmj
** Modified date: 2007-01-11
** Version:
** Descriptions: 双边沿PWM输出实验。
**
********************************************************************************************************/
#include "config.h"
#define tmp1 Fpclk/100
/*********************************************************************************************************
** 函数名称 :Init
** 函数功能 :初始化IO口,设置P2.1、P2.3、P2.5为双边沿输出
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************/
void IO_Init(void)
{
PINSEL4 = (PINSEL4 & (~(0x03 << 2)))|(0x01 << 2); // P2.1连接到PWM1.2(PWM2)
PINSEL4 = (PINSEL4 & (~(0x03 << 6)))|(0x01 << 6); // P2.3连接到PWM1.4(PWM4)
PINSEL4 = (PINSEL4 & (~(0x03 << 10)))|(0x01 << 10); // P2.5连接到PWM1.6(PWM6)
}
/*********************************************************************************************************
** 函数名称 :PWM_Dbl_Init
** 函数功能 :初始化双边沿PWM输出。
** 入口参数 :无。
** 出口参数 :无。
*********************************************************************************************************/
void PWM_Dbl_Init(void)
{
uint32 tmp;
tmp = Fpclk / 100;
PWM1PR = 0x09; // 对pclk进行分频,PWM计数频率为Fpclk的1/10
PWM1MCR = 0x02; // PWMMR0与PWMTC匹配时复位PWMTC
PWM1PCR = (1 << 2) | // PWM2双边沿控制
(1 << 4) | // PWM4双边沿控制
(1 << 6) | // PWM6双边沿控制
(1 << 10) | // 使能PWM2输出
(1 << 12) | // 使能PWM4输出
(1 << 14); // 使能PWM6输出
PWM1MR0 = tmp; // PWM速率控制/计数初值
/* 设置双边沿脉冲的脉宽和位置 */
PWM1MR1 = 0; // PWM2的置位位置
PWM1MR2 = (tmp / 8) * 7; // PWM2的复位位置
PWM1MR3 = (tmp / 8)*2; // PWM4的置位位置
PWM1MR4 = (tmp / 8) * 6; // PWM4的复位位置
PWM1MR5 = (tmp / 8) * 3; // PWM6的置位位置
PWM1MR6 = (tmp / 8) * 5; // PWM6的复位位置
PWM1LER = 0x7F; // 锁存所有PWM匹配值
PWM1TCR = 0x02; // 复位PWMTC
PWM1TCR = 0x09; // 使能PWM
}
/*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :演示双边沿PWM现象。
** 入口参数 :无。
** 出口参数 :为0时表明函数出错。
** 函数说明 :需要用多通道示波器或者逻辑分析仪进行观察
*********************************************************************************************************/
int main (void)
{
IO_Init(); //初始化IO口,设置P2.1、P2.3、P2.5为双边沿输出
PWM_Dbl_Init(); // 初始化双边沿PWM输出
//设好了相关寄存器之后,相应的管脚就有相应的双边沿的PWM输出
while(1);
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -