NXP双核LPC4357之LED,最近弄来了一块LPC4357的评估的板,今天有时间看了一下,先点个LED来,有人玩这个双核的MCU吗,一起探讨啊。
规格书: 在LPC43xx上,数字引脚将分组到16个引脚组,即P0到P9和PA到PF,每组最多使用20个引脚。每个数字引脚可以支持多达8种不同的数字引脚功能,包括通用I/O (GPIO),可通过SCU引脚配置寄存器进行选择。一些数字引脚支持附加模拟功能,可通过SCU中的ENAIO寄存器进行选择。
对于GPOI和LPC1788有一点区别了,不再是Px_x对应GPIO(x)了,一组GPIO有的是由两组Pin脚组合的,在软件里面也多了一个设置,一个是Pin脚设置,一个是要GPIO设置。
LED程序如下:
/*********************************************Copyright (c)***********************************************
**--------------File Info---------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2012-06-01
** Last Version: V1.00
** Descriptions: The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by: Zhengbailiang
** Created date: 2012-06-01
** Version: V1.00
** Descriptions: 添加GPIO口测试程序
**
**--------------------------------------------------------------------------------------------------------
** Modified by: Zhengxiaocheng
** Modified date: 2013-08-14
** Version: V1.10
** Descriptions:
** Checked by: Guo yufeng (2013-08-14)
** Rechecked by:
*********************************************************************************************************/
#include "lpc43xx_gpio.h"
#include "lpc43xx_scu.h"
#include "lpc43xx_libcfg.h"
#include "lpc43xx_cgu.h"
#include "Delay.h"
/*********************************************************************************************************
定义LED引脚宏
*********************************************************************************************************/
#define LED_SCU_PORT 9 //Pin脚设置
#define LED1_SCU_NUM 0
#define LED2_SCU_NUM 1
#define LED3_SCU_NUM 2
#define LED_GPIO_PORT 4 //GPIO设置
#define LED1_GPIO_NUM 12
#define LED2_GPIO_NUM 13
#define LED3_GPIO_NUM 14
#define LED_GPIO_MASK ((1UL << LED1_GPIO_NUM) | \
(1UL << LED2_GPIO_NUM) | \
(1UL << LED3_GPIO_NUM))
/*********************************************************************************************************
** Function name: main
** Descriptions: 主函数入口
** GPIO_LED测试用例:
** 应用说明:
** 本示例程序,用软件延时的方法精确的控制LED闪烁间隔时间
**
** 测试步骤:
** 1、程序运行后,全速运行观察LED1、LED2、LED3的亮灭状态。
** 2、条件允许时,用示波器观察LED灯的控制信号,可以看到高低电平分别持续时间为0.5秒。
**
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main(void)
{
uint32_t ulSysM4Clk = 0;
SystemInit();
ulSysM4Clk = 204000000;
// CGU_Init(); /* 时钟初始化(72MHz) */
*(uint32_t *)(0x40050018) = 0x0;
// *(uint32_t *)(0x40050044) = 0x06170880;
// sysSoftlDly(1000);
*(uint32_t *)(0x40050044) = 0x061008c0;
sysSoftlDly(1000);
*(uint32_t *)(0x4005006c) = 0x09000800;
sysSoftlDly(1000);
/*
* 获取M4内核时钟频率
*/
//CGU_GetPCLKFrequency(CGU_PERIPHERAL_M4CORE);
/*
* 选择引脚复用功能
* P7.3 -> GPIO3_11(FUNC0)
* P7.4 -> GPIO3_12(FUNC0)
* P7.5 -> GPIO3_13(FUNC0)
* 选择为GPIO功能后,应使用GPIO编号来操作GPIO口
*
* 模式配置
* bit[2:0] -> FUNC0-7,8种数字复用功能选择
* bit[3] -> EPD,0禁能下拉,1使能下拉
* bit[4] -> EPULN,0使能上拉,1禁能上拉
* bit[5] -> EHS,0选择低速率低噪声(30-80MHz),1选择高速率高噪声(75-204MHz),部分引脚存在该功能
* bit[6] -> EZI,0禁能输入缓冲器,1使能输入缓冲器,引脚作为输入时,必须置位该位
* bit[7] -> ZIF,0使能输入滤波器,1禁能输入滤波器
*/
scu_pinmux(LED_SCU_PORT, LED1_SCU_NUM, MD_EHD0, FUNC0);
scu_pinmux(LED_SCU_PORT, LED2_SCU_NUM, MD_PLN, FUNC0);
scu_pinmux(LED_SCU_PORT, LED3_SCU_NUM, MD_PLN, FUNC0);
/*
* 将GPIO3_11、GPIO3_12、GPIO3_13配置为输出,GPIO_SetDir函数参数定义如下:
*
* 第1个参数:为GPIO接口编号,0~7
* 第2个参数:为配置引脚的掩码,为零表示屏蔽其操作,如该字段为0x0000FFFF,则表示该配置对0~15编号引脚生效
* 第3个参数:0输入,1输出,只对第2个参数中对应位为1的引脚有效
*/
GPIO_SetDir(LED_GPIO_PORT, LED_GPIO_MASK, 1);
while (1) {
sysSoftlDly(ulSysM4Clk / 6); /* 在SRAM中调试时,延时为0.5秒 */
GPIO_SetValue(LED_GPIO_PORT, LED_GPIO_MASK); /* 熄灭3个LED灯 */
sysSoftlDly(ulSysM4Clk / 6); /* 在SRAM中调试时,延时为0.5秒 */
GPIO_ClearValue(LED_GPIO_PORT, LED_GPIO_MASK); /* 点亮3个LED灯 */
}
}
#ifdef DEBUG
/*********************************************************************************************************
** Function name: check_failed
** Descriptions: file 所在文件
** line 所在行
** input parameters: User can add his own implementation to report the file name and line number,
** ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line)
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void check_failed(uint8_t *file, uint32_t line)
{
while (1) {
}
}
#endif
/*********************************************************************************************************
End Of File
*********************************************************************************************************/