|
项目名:ASM_Example_Dynamic_PWM_PRS
作用:通过开关PWM8和PRS8(伪随机序列)之间的数字模块可动态重配置。这个例子也说明PRS产生脉宽的优势。
运行:时钟分频器VC1,VC2和VC3分别用于分频24MHz的16,16和128分频。结果为732HZr的时钟输入给8位计数器(基于配置的用户模块)。
如果按评估板上的SW按钮。PWM配置装载,同时双周斯装载到计数器。如果按钮按下及保持PRS_config装载同时128周期装载入计数器。
PWM配置包括一个标准的8位PWM(脉宽比为1:1)。脉宽和最终的输出计数显示在LED上
线路连接: P14 -> SW = User Button P20 -> LED1 = PWM Pulse Width or PRS Pulse Density P22 -> LED2 = PWM Terminal Count P23 -> LED3 = PRS Bit Stream
代码:
// include m8c specific declarations include “m8c.inc” // include User Module API specific declarations include “psocapi.inc” export _main: _main: // configure port pins and reg[PRT1DR], ~0x10 mov reg[PRT2DR], 0x00 // start clock generator lcall Counter8_1_Start // load PRS configuration lcall LoadConfig_PRS_Config jmp PWM PRS: // stop and unload PWM configuration lcall PWM8_1_Stop lcall UnloadConfig_PWM_Config // then load PRS config lcall LoadConfig_PRS_Config // update clock divider, don’t wait for period reload lcall Counter8_1_Stop
mov A, 0x7F lcall Counter8_1_WritePeriod lcall Counter8_1_Start // configure and start PRS mov A, 0x01 lcall PRS8_1_WriteSeed mov A, 0xB8 lcall PRS8_1_WritePolynomial lcall PRS8_1_Start // load compare value, must be loaded after PRS is started mov reg[PRS8_1_SEED_REG], 0x7F PRSloop: // wait for button release tst reg[PRT1DR], 0x10 jnz PRSloop // simple debounce tst reg[PRT1DR], 0x10 jnz PRSloop jmp PWM PWM: // stop and unload PRS configuration lcall PRS8_1_Stop lcall UnloadConfig_PRS_Config // then load PWM config lcall LoadConfig_PWM_Config // update clock divider, don’t wait for period reload lcall Counter8_1_Stop
mov A, 0x01 lcall Counter8_1_WritePeriod lcall Counter8_1_Start // configure and start PWM mov A, 0xFF lcall PWM8_1_WritePeriod mov A, 0x7F lcall PWM8_1_WritePulseWidth // enable PWM lcall PWM8_1_Start PWMloop: // wait for button release tst reg[PRT1DR], 0x10 jz PWMloop // simple debounce tst reg[PRT1DR], 0x10 jz PWMloop jmp PRS
|