init:全链路闭环控制调通
This commit is contained in:
@@ -5,16 +5,25 @@
|
||||
* @v2CliArgs --device "MSPM0G3507" --package "LQFP-64(PM)" --product "mspm0_sdk@2.04.00.06"
|
||||
* @versions {"tool":"1.23.1+4034"}
|
||||
*/
|
||||
scripting.excludeFromBuild("device_linker.cmd");
|
||||
scripting.excludeFromBuild("device_linker.lds");
|
||||
scripting.excludeFromBuild("device.opt");
|
||||
scripting.excludeFromBuild("device.cmd.genlibs");
|
||||
scripting.excludeFromBuild("device.lds.genlibs");
|
||||
scripting.excludeFromBuild("Event.dot");
|
||||
|
||||
/**
|
||||
* Import the modules used in this configuration.
|
||||
*/
|
||||
const GPIO = scripting.addModule("/ti/driverlib/GPIO", {}, false);
|
||||
const GPIO1 = GPIO.addInstance();
|
||||
const GPIO2 = GPIO.addInstance();
|
||||
const SYSCTL = scripting.addModule("/ti/driverlib/SYSCTL");
|
||||
const SYSTICK = scripting.addModule("/ti/driverlib/SYSTICK");
|
||||
const VREF = scripting.addModule("/ti/driverlib/VREF");
|
||||
const GPIO = scripting.addModule("/ti/driverlib/GPIO", {}, false);
|
||||
const GPIO1 = GPIO.addInstance();
|
||||
const GPIO2 = GPIO.addInstance();
|
||||
const QEI = scripting.addModule("/ti/driverlib/QEI", {}, false);
|
||||
const QEI1 = QEI.addInstance();
|
||||
const SYSCTL = scripting.addModule("/ti/driverlib/SYSCTL");
|
||||
const SYSTICK = scripting.addModule("/ti/driverlib/SYSTICK");
|
||||
const VREF = scripting.addModule("/ti/driverlib/VREF");
|
||||
const ProjectConfig = scripting.addModule("/ti/project_config/ProjectConfig");
|
||||
|
||||
/**
|
||||
* Write custom configuration values to the imported modules.
|
||||
@@ -79,6 +88,13 @@ GPIO2.associatedPins[0].interruptEn = true;
|
||||
GPIO2.associatedPins[0].polarity = "RISE";
|
||||
GPIO2.associatedPins[0].pin.$assign = "PA18";
|
||||
|
||||
QEI1.$name = "QEI_0";
|
||||
QEI1.peripheral.$assign = "TIMG8";
|
||||
QEI1.peripheral.ccp0Pin.$assign = "PB6";
|
||||
QEI1.peripheral.ccp1Pin.$assign = "PB7";
|
||||
QEI1.ccp0PinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric0";
|
||||
QEI1.ccp1PinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric1";
|
||||
|
||||
SYSCTL.forceDefaultClkConfig = true;
|
||||
SYSCTL.clockTreeEn = true;
|
||||
scripting.suppress("For best practices when the CPUCLK is running at 32MHz and above, clear the flash status bit using DL_FlashCTL_executeClearStatus\\(\\) before executing any flash operation\\. Otherwise there may be false positives\\.", SYSCTL);
|
||||
@@ -98,6 +114,8 @@ VREF.peripheral.vrefPosPin.$assign = "PA23";
|
||||
VREF.peripheral.vrefNegPin.$assign = "PA21";
|
||||
VREF.vrefNegPinConfig.$name = "ti_driverlib_gpio_GPIOPinGeneric30";
|
||||
|
||||
ProjectConfig.genLibIQVersion = "MATHACL";
|
||||
|
||||
/**
|
||||
* Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
|
||||
* version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
|
||||
#include "ti_msp_dl_config.h"
|
||||
|
||||
DL_TimerG_backupConfig gQEI_0Backup;
|
||||
|
||||
/*
|
||||
* ======== SYSCFG_DL_init ========
|
||||
* Perform any initialization needed before using any board APIs
|
||||
@@ -50,19 +52,47 @@ SYSCONFIG_WEAK void SYSCFG_DL_init(void)
|
||||
SYSCFG_DL_GPIO_init();
|
||||
/* Module-Specific Initializations*/
|
||||
SYSCFG_DL_SYSCTL_init();
|
||||
SYSCFG_DL_QEI_0_init();
|
||||
SYSCFG_DL_VREF_init();
|
||||
SYSCFG_DL_SYSTICK_init();
|
||||
/* Ensure backup structures have no valid state */
|
||||
gQEI_0Backup.backupRdy = false;
|
||||
|
||||
}
|
||||
/*
|
||||
* User should take care to save and restore register configuration in application.
|
||||
* See Retention Configuration section for more details.
|
||||
*/
|
||||
SYSCONFIG_WEAK bool SYSCFG_DL_saveConfiguration(void)
|
||||
{
|
||||
bool retStatus = true;
|
||||
|
||||
retStatus &= DL_TimerG_saveConfiguration(QEI_0_INST, &gQEI_0Backup);
|
||||
|
||||
return retStatus;
|
||||
}
|
||||
|
||||
|
||||
SYSCONFIG_WEAK bool SYSCFG_DL_restoreConfiguration(void)
|
||||
{
|
||||
bool retStatus = true;
|
||||
|
||||
retStatus &= DL_TimerG_restoreConfiguration(QEI_0_INST, &gQEI_0Backup, false);
|
||||
|
||||
return retStatus;
|
||||
}
|
||||
|
||||
SYSCONFIG_WEAK void SYSCFG_DL_initPower(void)
|
||||
{
|
||||
DL_GPIO_reset(GPIOA);
|
||||
DL_GPIO_reset(GPIOB);
|
||||
DL_TimerG_reset(QEI_0_INST);
|
||||
DL_VREF_reset(VREF);
|
||||
|
||||
|
||||
DL_GPIO_enablePower(GPIOA);
|
||||
DL_GPIO_enablePower(GPIOB);
|
||||
DL_TimerG_enablePower(QEI_0_INST);
|
||||
DL_VREF_enablePower(VREF);
|
||||
|
||||
delay_cycles(POWER_STARTUP_DELAY);
|
||||
@@ -76,6 +106,9 @@ SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
|
||||
DL_GPIO_initPeripheralAnalogFunction(GPIO_LFXIN_IOMUX);
|
||||
DL_GPIO_initPeripheralAnalogFunction(GPIO_LFXOUT_IOMUX);
|
||||
|
||||
DL_GPIO_initPeripheralInputFunction(GPIO_QEI_0_PHA_IOMUX,GPIO_QEI_0_PHA_IOMUX_FUNC);
|
||||
DL_GPIO_initPeripheralInputFunction(GPIO_QEI_0_PHB_IOMUX,GPIO_QEI_0_PHB_IOMUX_FUNC);
|
||||
|
||||
DL_GPIO_initDigitalOutputFeatures(LED_A14_PIN_14_IOMUX,
|
||||
DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_DOWN,
|
||||
DL_GPIO_DRIVE_STRENGTH_LOW, DL_GPIO_HIZ_DISABLE);
|
||||
@@ -111,128 +144,6 @@ static const DL_SYSCTL_LFCLKConfig gLFCLKConfig = {
|
||||
.monitor = false,
|
||||
.xt1Drive = DL_SYSCTL_LFXT_DRIVE_STRENGTH_HIGHEST,
|
||||
};
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
void DL_SYSCTL_setHFCLKSourceHFXTParams (DL_SYSCTL_HFXT_RANGE range, uint32_t startupTime, bool monitorEnable)
|
||||
{
|
||||
uint32_t register_temp = SYSCTL->SOCLOCK.HFCLKCLKCFG;
|
||||
|
||||
register_temp &= ~(SYSCTL_HFCLKCLKCFG_HFXTRSEL_MASK | SYSCTL_HFCLKCLKCFG_HFCLKFLTCHK_MASK);
|
||||
|
||||
switch(range)
|
||||
{
|
||||
case DL_SYSCTL_HFXT_RANGE_4_8_MHZ : register_temp |= (SYSCTL_HFCLKCLKCFG_HFXTRSEL_RANGE4TO8); break;
|
||||
case DL_SYSCTL_HFXT_RANGE_8_16_MHZ : register_temp |= (SYSCTL_HFCLKCLKCFG_HFXTRSEL_RANGE8TO16); break;
|
||||
case DL_SYSCTL_HFXT_RANGE_16_32_MHZ: register_temp |= (SYSCTL_HFCLKCLKCFG_HFXTRSEL_RANGE16TO32); break;
|
||||
case DL_SYSCTL_HFXT_RANGE_32_48_MHZ: register_temp |= (SYSCTL_HFCLKCLKCFG_HFXTRSEL_RANGE32TO48); break;
|
||||
}
|
||||
register_temp |= (monitorEnable) ? (SYSCTL_HFCLKCLKCFG_HFCLKFLTCHK_ENABLE) : (SYSCTL_HFCLKCLKCFG_HFCLKFLTCHK_DISABLE);
|
||||
|
||||
SYSCTL->SOCLOCK.HFCLKCLKCFG = register_temp;
|
||||
|
||||
SYSCTL->SOCLOCK.HSCLKEN |= SYSCTL_HSCLKEN_HFXTEN_ENABLE; // 必须启动 否则频率不准
|
||||
|
||||
SYSCTL->SOCLOCK.HSCLKEN = SYSCTL_HSCLKEN_SYSPLLEN_ENABLE | SYSCTL_HSCLKEN_USEEXTHFCLK_ENABLE;
|
||||
SYSCTL->SOCLOCK.HSCLKEN |= SYSCTL_HSCLKCFG_HSCLKSEL_HFCLKCLK;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void DL_SYSCTL_configSYSPLL (const DL_SYSCTL_SYSPLLConfig *config)
|
||||
{
|
||||
uint32_t register_temp = 0;
|
||||
|
||||
|
||||
SYSCTL->SOCLOCK.HSCLKEN &= ~(SYSCTL_HSCLKEN_SYSPLLEN_MASK);
|
||||
|
||||
{
|
||||
register_temp = SYSCTL->SOCLOCK.SYSPLLCFG0;
|
||||
|
||||
register_temp &= ~(SYSCTL_SYSPLLCFG0_SYSPLLREF_MASK | SYSCTL_SYSPLLCFG0_MCLK2XVCO_MASK
|
||||
| SYSCTL_SYSPLLCFG0_ENABLECLK0_MASK | SYSCTL_SYSPLLCFG0_ENABLECLK1_MASK | SYSCTL_SYSPLLCFG0_ENABLECLK2X_MASK
|
||||
| SYSCTL_SYSPLLCFG0_RDIVCLK0_MASK | SYSCTL_SYSPLLCFG0_RDIVCLK1_MASK | SYSCTL_SYSPLLCFG0_RDIVCLK2X_MASK );
|
||||
register_temp |= config->rDivClk2x ;
|
||||
register_temp |= config->rDivClk1 ;
|
||||
register_temp |= config->rDivClk0 ;
|
||||
register_temp |= config->enableCLK2x ;
|
||||
register_temp |= config->enableCLK1 ;
|
||||
register_temp |= config->enableCLK0 ;
|
||||
register_temp |= config->sysPLLMCLK ;
|
||||
register_temp |= config->sysPLLRef ;
|
||||
|
||||
SYSCTL->SOCLOCK.SYSPLLCFG0 = register_temp;
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
register_temp = SYSCTL->SOCLOCK.SYSPLLCFG1;
|
||||
|
||||
register_temp &= ~(SYSCTL_SYSPLLCFG1_PDIV_MASK | SYSCTL_SYSPLLCFG1_QDIV_MASK);
|
||||
register_temp |= (config->qDiv << SYSCTL_SYSPLLCFG1_QDIV_OFS );
|
||||
register_temp |= (config->pDiv);
|
||||
|
||||
SYSCTL->SOCLOCK.SYSPLLCFG1 = register_temp;
|
||||
}
|
||||
|
||||
{
|
||||
SYSCTL->SOCLOCK.SYSPLLPARAM0 =
|
||||
*(volatile uint32_t *) ((uint32_t) config->inputFreq);
|
||||
SYSCTL->SOCLOCK.SYSPLLPARAM1 =
|
||||
*(volatile uint32_t *) ((uint32_t) config->inputFreq + (uint32_t) 0x4);
|
||||
}
|
||||
|
||||
|
||||
SYSCTL->SOCLOCK.HSCLKEN |= SYSCTL_HSCLKEN_SYSPLLEN_ENABLE;
|
||||
|
||||
while ((DL_SYSCTL_getClockStatus() & SYSCTL_CLKSTATUS_SYSPLLGOOD_MASK) !=
|
||||
DL_SYSCTL_CLK_STATUS_SYSPLL_GOOD) {
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void DL_SYSCTL_setLFCLKSourceLFXT (const DL_SYSCTL_LFCLKConfig *config)
|
||||
{
|
||||
uint32_t register_temp = SYSCTL->SOCLOCK.LFCLKCFG;
|
||||
|
||||
register_temp &= ~(SYSCTL_LFCLKCFG_XT1DRIVE_MASK | SYSCTL_LFCLKCFG_MONITOR_MASK | SYSCTL_LFCLKCFG_LOWCAP_MASK);
|
||||
register_temp |= (config->lowCap) ? (SYSCTL_LFCLKCFG_LOWCAP_ENABLE) : (SYSCTL_LFCLKCFG_LOWCAP_DISABLE);
|
||||
register_temp |= (config->monitor) ? (SYSCTL_LFCLKCFG_MONITOR_ENABLE) : (SYSCTL_LFCLKCFG_MONITOR_DISABLE);
|
||||
register_temp |= (config->xt1Drive);
|
||||
|
||||
SYSCTL->SOCLOCK.LFCLKCFG = register_temp;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void DL_SYSCTL_switchMCLKfromSYSOSCtoHSCLK (DL_SYSCTL_HSCLK_SOURCE source)
|
||||
{
|
||||
|
||||
SYSCTL->SOCLOCK.HSCLKCFG = (uint32_t) source;
|
||||
SYSCTL->SOCLOCK.MCLKCFG |= SYSCTL_MCLKCFG_USEHSCLK_ENABLE;
|
||||
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
|
||||
{
|
||||
|
||||
@@ -258,6 +169,27 @@ SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
|
||||
}
|
||||
|
||||
|
||||
static const DL_TimerG_ClockConfig gQEI_0ClockConfig = {
|
||||
.clockSel = DL_TIMER_CLOCK_BUSCLK,
|
||||
.divideRatio = DL_TIMER_CLOCK_DIVIDE_1,
|
||||
.prescale = 0U
|
||||
};
|
||||
|
||||
|
||||
SYSCONFIG_WEAK void SYSCFG_DL_QEI_0_init(void) {
|
||||
|
||||
DL_TimerG_setClockConfig(
|
||||
QEI_0_INST, (DL_TimerG_ClockConfig *) &gQEI_0ClockConfig);
|
||||
|
||||
DL_TimerG_configQEI(QEI_0_INST, DL_TIMER_QEI_MODE_2_INPUT,
|
||||
DL_TIMER_CC_INPUT_INV_NOINVERT, DL_TIMER_CC_0_INDEX);
|
||||
DL_TimerG_configQEI(QEI_0_INST, DL_TIMER_QEI_MODE_2_INPUT,
|
||||
DL_TIMER_CC_INPUT_INV_NOINVERT, DL_TIMER_CC_1_INDEX);
|
||||
DL_TimerG_setLoadValue(QEI_0_INST, 65535);
|
||||
DL_TimerG_enableClock(QEI_0_INST);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static const DL_VREF_Config gVREFConfig = {
|
||||
.vrefEnable = DL_VREF_ENABLE_DISABLE,
|
||||
|
||||
@@ -87,6 +87,23 @@ extern "C" {
|
||||
|
||||
|
||||
|
||||
|
||||
/* Defines for QEI_0 */
|
||||
#define QEI_0_INST TIMG8
|
||||
#define QEI_0_INST_IRQHandler TIMG8_IRQHandler
|
||||
#define QEI_0_INST_INT_IRQN (TIMG8_INT_IRQn)
|
||||
/* Pin configuration defines for QEI_0 PHA Pin */
|
||||
#define GPIO_QEI_0_PHA_PORT GPIOB
|
||||
#define GPIO_QEI_0_PHA_PIN DL_GPIO_PIN_6
|
||||
#define GPIO_QEI_0_PHA_IOMUX (IOMUX_PINCM23)
|
||||
#define GPIO_QEI_0_PHA_IOMUX_FUNC IOMUX_PINCM23_PF_TIMG8_CCP0
|
||||
/* Pin configuration defines for QEI_0 PHB Pin */
|
||||
#define GPIO_QEI_0_PHB_PORT GPIOB
|
||||
#define GPIO_QEI_0_PHB_PIN DL_GPIO_PIN_7
|
||||
#define GPIO_QEI_0_PHB_IOMUX (IOMUX_PINCM24)
|
||||
#define GPIO_QEI_0_PHB_IOMUX_FUNC IOMUX_PINCM24_PF_TIMG8_CCP1
|
||||
|
||||
|
||||
/* Defines for VREF */
|
||||
#define VREF_VOLTAGE_MV 3300
|
||||
#define GPIO_VREF_VREFPOS_PORT GPIOA
|
||||
@@ -126,10 +143,13 @@ void SYSCFG_DL_init(void);
|
||||
void SYSCFG_DL_initPower(void);
|
||||
void SYSCFG_DL_GPIO_init(void);
|
||||
void SYSCFG_DL_SYSCTL_init(void);
|
||||
void SYSCFG_DL_QEI_0_init(void);
|
||||
void SYSCFG_DL_VREF_init(void);
|
||||
|
||||
void SYSCFG_DL_SYSTICK_init(void);
|
||||
|
||||
bool SYSCFG_DL_saveConfiguration(void);
|
||||
bool SYSCFG_DL_restoreConfiguration(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user