lising

  • 2019-07-17
  • 加入了学习《WEBENCH 设计工具性能增强》,观看 WEBENCH 设计工具性能增强

  • 加入了学习《电源设计小贴士54-55:将双节滤波器用于低噪声电源路》,观看 电源设计小贴士54-55:将双节滤波器用于低噪声电源路

  • 2019-07-16
  • 发表了主题帖: 【沁恒试用】八、FlashROM

    本帖最后由 lising 于 2019-7-16 17:28 编辑        本次实验对CH549内部的Data Flash指定地址写入指定数据,读出后送P2端口并通过P22、P23、P24、P25连接的LED进行显示。同时读出的数据利用串口UART0向PC端发送数据,使用串口调试助手进行显示。 一、实验资源 1、CH549EVT学习开发板; 2、Keil v5.28.0.0; 3、CH549开发资料汇总.rar; 4、WCHISPTool v2.70; 5、CH549EVT其它相关文档; 6、串口调试助手SSCOM51 v5.13.1;   二、实验准备 1、CH549 存储器空间。CH549存储器空间地址的F000H~F3FFH为Data Flash(EEPROM),支持单字节读(8位)、单字节写(8位)、块写(1~64字节)、块擦除(64字节)操作,芯片掉电后数据保持不变,也可用作 Code Flash。从描述中可以看出其应用是非常灵活的。 2、与Data  Flash(EEPROM)相关寄存器。可以看到与Data  Flash相关的寄存器数量比较多,但应用时还是比较方便的。 三、本次实验        实验的思路是对Data Flash指定地址(0XF000)先进行擦除操作,然后在该地址上写入一个单字节数据,最后再将这个写入的数据读出送P2端口的P25;再擦除->写入->读出送P2端口……经过4次循环后可以看到P2端口的四个LED被分别点亮、熄灭,形成流水灯效果。读出的数据同时通过UART0发往PC端,并通过串口助手进行显示。UART0直接使用了前面实验的文件,但把时钟进行了调整,即Fsys=24MHz。        实验代码参考了官方例程,并进行了裁剪,去除了一些核验环节,主要是为了更加直观地理解。主要测试代码如下: //单字节擦除 void Flash_Erase(UINT16 FLASH_DATA_ADDR) { EA = 0; //关闭全局中断,防止Flash操作被打断 SAFE_MOD = 0X55; SAFE_MOD = 0XAA; //使能安全模式 GLOBAL_CFG |= bDATA_WE; //开启FLASH_DATA写使能 ROM_ADDR = FLASH_DATA_ADDR; //设置地址寄存器写入16位目标地址 ROM_BUF_MOD = 0x80; ROM_DAT_BUF = 0x00; //设置擦写操作的数据缓冲寄存器为00h; ROM_CTRL = ROM_CMD_ERASE; //启动擦除 ROM_DAT_BUF = 0X00; SAFE_MOD = 0X55; SAFE_MOD = 0XAA; //使能安全模式 GLOBAL_CFG &= ~bDATA_WE; //开启FLASH_DATA写保护 EA = 1; //恢复全局中断 } //字节编程 void Flash_ProgByte(UINT16 FLASH_DATA_ADDR, UINT8 DATA) { EA = 0; //关闭全局中断,防止Flash操作被打断 SAFE_MOD = 0X55; SAFE_MOD = 0XAA; //使能安全模式 GLOBAL_CFG |= bDATA_WE; //开启FLASH_DATA写使能 ROM_ADDR = FLASH_DATA_ADDR; //设置地址寄存器写入16位目标地址 ROM_BUF_MOD = 0x80; ROM_DAT_BUF = DATA; //设置擦写操作的数据缓冲寄存器为00h; ROM_CTRL = ROM_CMD_PROG; //启动编程 SAFE_MOD = 0X55; SAFE_MOD = 0XAA; //使能安全模式 GLOBAL_CFG &= ~bDATA_WE; //开启FLASH_DATA写保护 EA = 1; //恢复全局中断 } //读指定地址数据 UINT8 Flash_Read(UINT16 FLASH_DATA_ADDR) { UINT8 TEMP; TEMP = *(PUINT8C)FLASH_DATA_ADDR; return TEMP; } UINT8 LED_TAB[] = {0X1C,0X2C,0X34,0X38}; void delayms(UINT16 ms) { UINT16 i; for(; ms>0; ms--) for(i=1850; i>0; i--); } void GPIO_Config(void) { P2_MOD_OC &= ~0x3c; P2_DIR_PU |= 0x3c; P2 |= 0X3C; } void main() { UINT8 i; UINT16 ID, Read_data; GPIO_Config(); UART0_Config(); // ID = CHIP_ID; //读芯片ID识别码,CH549为0X49 // printf("\nWCH CH549EVT UART0 TEST\n"); while(1) { for(i=0; i<4; i++) { Flash_Erase(0xf000); Flash_ProgByte(0xf000, LED_TAB); Read_data = Flash_Read(0xf000); printf("Read_data = %#2X\n",Read_data); P2 = Read_data; delayms(500); } } }   四、实验结果 五、实验总结        通过本次实验对CH549的Data  Flash(EEPROM)有了粗浅的认识,通过简单的实验实现了在指定地址的数据存储与读取,为后期的进阶试验创造了条件。 此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处  

  • 加入了学习《LM25066I系统电源管理和保护IC概述》,观看 LM25066I系统电源管理和保护IC概述

  • 加入了学习《 电源设计小贴士38:使用简易锁存电路保护电源》,观看 电源设计小贴士38:使用简易锁存电路保护电源

  • 2019-07-15
  • 加入了学习《电源设计小贴士53:采用P-Sprice设计电源控制环路》,观看 电源设计小贴士53:采用P-Sprice设计电源控制环路

  • 加入了学习《电源设计小贴士52:改造墙式电源》,观看 电源设计小贴士52:改造墙式电源

  • 2019-07-14
  • 加入了学习《电源设计小贴士51:了解电容器的寄生效应》,观看 电源设计小贴士51:了解电容器的寄生效应

  • 加入了学习《电源设计小贴士50:铝电解电容器常见缺陷的规避方法》,观看 电源设计小贴士50:铝电解电容器常见缺陷的规避方法

  • 2019-07-13
  • 加入了学习《电源设计小贴士49:多层陶瓷电容器常见小缺陷的规避方法》,观看 电源设计小贴士49:多层陶瓷电容器常见小缺陷的规避方法

  • 加入了学习《电源设计小贴士44_1:如何处理高di/dt负载瞬态_1》,观看 电源设计小贴士44_1:如何处理高di/dt负载瞬态_1

  • 2019-07-12
  • 发表了主题帖: 【沁恒试用】七、TouchKey

           本次实验学习使用CH549上ADC模块的触摸按键功能,利用CH549EVT学习开发板上与P00、P01、P02、P03连接的四个触摸按键K1、K2、K3、K4分别控制与P22、P23、P24、P25连接的四个LED亮、灭。 一、实验资源 1、CH549EVT学习开发板; 2、Keil v5.28.0.0; 3、CH549开发资料汇总.rar; 4、WCHISPTool v2.70; 5、CH549EVT其它相关文档; 6、沁恒USB转串口模块; 7、串口调试助手SSCOM51 v5.13.1;   二、实验准备 1、CH549触摸按键。TouchKey被设置在了与ADC功能共用的端口,CH549共有16个12位ADC端口,分布在P0[7:0]与P2[7:0],支持16个外部触摸按键。触摸按键的检测利用了电容充放电,并通过ADC模块进行采集、判断。 TouchKey相关的寄存器还有一个“TKEY_CTRL ”,在这个寄存器中存储着触摸按键充电脉冲宽度数据,由于只有低7位有效,故其数据范围为“0~127”。这一数值的确定与触摸按键的外部电容值、微控制器的工作电压以及工作时钟频率相关。在具体的应用中应该考虑。计算公式如下: count=(Ckey+Cint)*0.7VDD/ITKEY/(2/Fsys)=(25p+15p)*0.35*5*12M/50u=17  TKEY_CTRL=count > 127 ? 127 : count  对于触摸按键的具体使用步骤手册中也给出了详细的说明: 三、本次实验        实验中同时使用了串口(UART0),用于观察按键的工作状态。由于前面的试验已经调试过UART0,这次实验直接包含相关的文件就可以了。CH549EVT上的四个触摸按键K1、K2、K3、K4分别连接到P00、P01、P02、P03,这四个GPIO端口对应着触摸按键输入通道的AIN8、AIN9、AIN10、AIN11。功能实现的程序代码是在官方例程的基础上删减、修改而成。 测试代码如下: void TouchKey_Init( void )//触摸按键初始化 { //Touch采样通道设置为高阻输入 P0_MOD_OC &= 0xF0; //P00 P01 P02 P03高阻输入 P0_DIR_PU &= 0xF0; ADC_CFG |= (bADC_EN|bADC_AIN_EN); //开启ADC模块电源,选择外部通道 ADC_CFG = ADC_CFG & ~(bADC_CLK0 | bADC_CLK1); //选择ADC参考时钟750KHz ADC_CHAN = (3<<4); //默认选择外部通道0 ADC_CTRL = bADC_IF; //清除ADC转换完成标志,写1清零 IE_ADC = 1; //开启ADC中断使能 EA = 1; //开启总中断使能 } UINT16 TouchKeySelect(UINT8 ch,UINT8 cpw)//触摸按键通道选择 { ADC_CHAN = ADC_CHAN & (~MASK_ADC_CHAN) | ch; //外部通道选择 GetValueFlag = 0; //标志位清0 TKEY_CTRL = cpw; //充电脉冲宽度配置,仅低7位有效(同时清除bADC_IF,启动一次TouchKey) while(GetValueFlag == 0); //等待采用完成 while(ADC_CTRL & bTKEY_ACT);//bTKEY_ACT=1时,表示正在给电容充电和ADC测量过程中 return (ADC_DAT & 0x0FFF); } void ADC_ISR(void) interrupt INT_NO_ADC///触摸按键数据采集中断 { if(ADC_CTRL & bADC_IF) { ADC_CTRL = bADC_IF; //清除ADC转换完成标志 GetValueFlag = 1; //采样完成标志 } } int main(void) { UINT8 ch; UINT16 value; UINT16 err; SAFE_MOD = 0x55; SAFE_MOD = 0xAA; //进入安全模式 CLOCK_CFG = 0X85; //使能内部晶振,Fsys=24MHz CLK_Config(); UART0_Config(); printf("TouchKey test\n"); LED_Port_Init(); TouchKey_Init(); Press_Flag = 0; //无按键按下 /* 获取按键初值 */ for(ch = 8; ch!=12; ch++) { PowerValue[ch] = TouchKeySelect(ch,CPW_Table[ch]); printf("%d ",PowerValue[ch] ); } printf("\n"); while(1) { /* 按键检测 */ for(ch = 8; ch!=12; ch++) { value = TouchKeySelect(ch,CPW_Table[ch]); err = ABS(PowerValue[ch],value); if(err > DOWM_THRESHOLD_VALUE) //差值大于阈值,认为按下 { if((Press_Flag & (1<<ch)) == 0) //说明是第一次按下 { printf("ch %d pressed,value:%d\n",(UINT16)ch, value); /* 点灯处理 */ LED_Control(ch-8,1); } Press_Flag |= (1<<ch); } else if(err < UP_THRESHOLD_VALUE) //说明抬起或者未按下 { if(Press_Flag & (1<<ch)) //刚抬起 { Press_Flag &= ~(1<<ch); printf("ch %d up,value:%d\n",(UINT16)ch, value); /* 灭灯处理 */ LED_Control(ch-8,0); } } } } }   四、实验结果        实现了基本功能。 五、实验总结        通过本次实验对CH549触摸按键有了初步的认识和了解。因为是第一次使用触摸按键,对于一些知识点的学习不够深入,理解上还存在错误。实验中尝试在板载四位按键表面覆盖一片PVC卡片,就是信用卡那种,厚度不足1mm,但没有成功。也尝试把“CPW_Table[16]”中的数据进行更改,还是没有成功。   此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处

  • 加入了学习《TI MCU的软件资源》,观看 MCU 软件服务简介 _ 1

  • 加入了学习《TI MCU的软件资源》,观看 MCU 软件服务简介 _ 4

  • 加入了学习《TI MCU的软件资源》,观看 MCU 软件服务简介 _ 3

  • 加入了学习《TI MCU的软件资源》,观看 MCU 软件服务简介 _ 2

  • 加入了学习《电源设计小贴士42:可替代集成MOSFET的分立器件》,观看 电源设计小贴士42:可替代集成MOSFET的分立器件

  • 2019-07-05
  • 发表了主题帖: 【沁恒试用】六、PWM

            本次实验利用CH549的PWM模块,分别在P22、P23、P24、P25引脚上输出4路不同占空比PWM波,并利用逻辑分析仪对占空比进行检测。 一、实验资源 1、CH549EVT学习开发板; 2、Keil v5.28.0.0; 3、CH549开发资料汇总.rar; 4、WCHISPTool v2.70; 5、CH549EVT其它相关文档; 6、逻辑分析仪;   二、实验准备 1、CH549的PWM资源。CH549提供了8路可以动态修改输出占空比的PWM,通过P2[7:0]引脚对外输出。使用中要注意的是8路PWM输出的编号与P2端口号并不是“数值对应”关系。 2、与PWM相关的寄存器。寄存器看着比较多,但是应用还是比较简单的;        在这8路PWM输出中的PWM1与PWM0还可以通过软件设置更改输出极性。通过PWM控制寄存器PWM_CTRL中的“bPWM1_POLAR ”和“bPWM0_POLAR ”进行设置,这两路输出使能控制也在此寄存器中;PWM控制寄存器PWM_CTRL2对其余6路PWM输出进行使能控制。PWM_CTRL中的“bPWM_MOD_6BIT”确定了PWM波型的周期值,可以选择8位数据或6位数据,8位数据精度相对于6位要高不少。PWM_DATAn中存放的数据决定了PWM输出的占空比。根据“bPWM_MOD_6BIT”的设置,占空比分别可以这样计算:PWM_DATAn/256(8位数据);PWM_DATAn/64(6位数据)。PWM时钟分频设置寄存器“PWM_CK_SE”中的数据决定了PWM输出频率,个人理解应该就是PWM输出频率的分频系数。 三、本次实验        根据上述学习了解,为PWM配置了4路输出,分别是PWM3、PWM2、PWM1、PWM0,与接有LED的P22、P23、P24、P25对应。P2的这四个端口也同时被配置为推挽输出。 在实验程序中将Fsys时钟直接飙到了48MHz,并为这4路PWM输出配置了不同的占空比。主要测试代码如下: void PWM_Config(void) { PWM_CTRL = 0x02; //默认值。选择8位数据PWM周期为256;清空PWM计数和FIFO PWM_CK_SE = 1; //设置PWM时钟分频除数Fsys/1=48M /*使能PWM输出,注意PWM1、PWM0输出使能位在PWM_CTRL;其余在PWM_CTRL2*/ PWM_CTRL2 |= bPWM3_OUT_EN; //PWM3输出使能,该位为1使能 PWM3输出 P22 PWM_CTRL2 |= bPWM2_OUT_EN; //PWM2输出使能,该位为1使能 PWM2输出 P23 PWM_CTRL |= bPWM1_OUT_EN; //PWM1输出使能,该位为1使能 PWM1输出 P24 PWM_CTRL |= bPWM0_OUT_EN; //PWM0输出使能,该位为1使能 PWM0输出 P25 /*预置PWM输出点空比,为便于观察预置了特殊数值*/ PWM_DATA3 = 32; //P22 Duty = 12.5% PWM_DATA2 = 64; //P23 Duty = 25% PWM_DATA1 = 128; //P24 Duty = 50% PWM_DATA0 = 192; //P25 Duty = 75% PWM_CTRL &= ~bPWM_CLR_ALL; //清零,恢复PWM计数和FIFO } void CLK_Config(void) { SAFE_MOD = 0x55; SAFE_MOD = 0xAA; //进入安全模式 CLOCK_CFG = 0X87; //使能内部晶振,Fsys=48MHz } void main() { CLK_Config(); //CH549时钟配置48M mDelaymS(20); GPIO_Init(PORT2,PIN2|PIN3|PIN4|PIN5,1);//PWM输出口配置为推挽输出 PWM_Config(); while(1) { } } 四、实验结果。 五、实验总结        CH549的PWM模块使用很简单,也比较灵活。按照手册中的介绍,PWM输出还能通过简单RC电阻电容进行积分低通滤波,做为低速数模转换器DAC使用。真不错!   此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处  

  • 2019-07-04
  • 回复了主题帖: 【沁恒试用】五、ADC

    我芯永恒 发表于 2019-7-4 10:42 楼主测评很实在,所谓的简单不轻视,困难要重视!期待期待后续
    谢谢表扬!继续学习分享。

  • 回复了主题帖: 【沁恒试用】五、ADC

    RCSN 发表于 2019-7-4 09:27 楼主评测内容很不错,期待后续
    谢谢表扬!继续学习。

统计信息

已有341人来访过

  • 芯币:1147
  • 好友:4
  • 主题:40
  • 回复:697
  • 课时:2
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言