#关于CY8C4147AZI-S475点亮一颗LED灯
第一次接触Cypress芯片,由于老板后面要用改芯片进行相关项目开发,于是开始在CY8C4147AZI-S475开发板调试起来,首先安装相应的IDE。这里要根据开发板上的芯片型号来安装相应的IDE版本,下载器不然识别不了。 刚开始直接在官网上下载了一个PSoCCreatorSetup_4.4_b80。安装编写了一个点灯程序,识别不了,无法烧录。后来又在官网上找到了CY8CKIT149Setup_RevSS.exe这个重新安装后就可以正常编译下载了。这个CY8CKIT149Setup_RevSS安装后显示的也是PSoC Creator,但是其中有一个Kits直接包含了CY8CKIT149,Kits应该是一个MCU包,没有这个IDE识别不了相应的芯片,虽然他能编译,但是烧录不了;第一次安装的IDE,Kits这里没有相应的组件;不知道是不是这个原因。
点灯的过程:
第一步:新建一个工程
File---->New------>Project,
根据芯片的型号选择对应的芯片型号类别建立一个空白的工程,然后填写工程名称,工作区间名称,保存位置;
第二步:在IDE右侧的操作栏中选择Cypress,找到Ports and pins 拖出一个引脚,在从Off-Chip的Diodes中拖出一颗LED(off-Chip这个步骤可以不做),但是Cypress这个IED可以只管的搭出硬件电路,然后绑定编程;搭建起来更直观;
双击拖出来的pin引脚,设置成输出,给引脚重新命名为LED_Pin,名字可以随便定义,该名字会直接影响到后面设置该引脚对应的API函数的名字。
第四步:绑定芯片引脚,双击IDE右侧的xxx.cydwr,xxx为工程名,本工程名为LED;在弹出的界面中将刚刚原理图中的LED_Pin与芯片的引脚绑定;开发板原理图上LED灯是连接P3.4;
第五步:编译,在mani()函数中添加自己的代码:
点灯的API函数是IED自己生成的;在LED_Pin这个文件夹里有相关的.c文件;
main()函数里在for循环前只对一个全局中断进行了使能,并没有对IO口进行初始化,但是实际烧录进开发板中时,验证功能时OK的;打开LED_Pin文件夹下的LED_Pin.c发现有这样一段预编译代码:
#if defined(LED_Pin__PC)
#define LED_Pin_SetP4PinDriveMode(shift, mode) \
do { \
LED_Pin_PC = (LED_Pin_PC & \
(uint32)(~(uint32)(LED_Pin_DRIVE_MODE_IND_MASK << \
(LED_Pin_DRIVE_MODE_BITS * (shift))))) | \
(uint32)((uint32)(mode) << \
(LED_Pin_DRIVE_MODE_BITS * (shift))); \
} while (0)
#else
#if (CY_PSOC4_4200L)
#define LED_Pin_SetP4PinDriveMode(shift, mode) \
do { \
LED_Pin_USBIO_CTRL_REG = (LED_Pin_USBIO_CTRL_REG & \
(uint32)(~(uint32)(LED_Pin_DRIVE_MODE_IND_MASK << \
(LED_Pin_DRIVE_MODE_BITS * (shift))))) | \
(uint32)((uint32)(mode) << \
(LED_Pin_DRIVE_MODE_BITS * (shift))); \
} while (0)
#endif
#endif
应该是在这里进行了IO口的init配置,有些不习惯这样的写法;暂时没有找到该芯片的寄存器手册,无法对这段代码中配置的相应的位做出分析;虽然有库函数可以用,但是不知根知底总是觉得没有掌握;