器件型号:MSP432P401R
大家好。 我无法将 GPIO_Port1的优先级设置为高于 ADC14。 我想在 P5.5处读取 ADC。 当在 P1.0 (从高到低)发生中断时,我将通过 USCIA0发送0xFFFF。
我尝试过,但结果不符合预期,以下是我的代码:
//我的代码
#include
#include
/*静态*/
静态 uint16_t curADCResult1[10000];
静态易失性 uint16_t i = 0;
静态易失性 uint16_t curADCResult;
静态易失性浮点标准化 ADCRes;
UINT_fast8_t 电压= 0;
const eUSCI_UART_Config uartConfig =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK、// SMCLK 时钟源
78、// BRDIV = 78
2、// UCxBRF = 2
0、// UCxBRS = 0
EUSCI_A_UART_NO_奇 偶校验、//无奇偶校验
EUSCI_A_UART_LSB_FIRST、// MSB 优先
EUSCI_A_UART_One_stop_bit、//一个停止位
EUSCI_A_UART_MODE、// UART 模式
EUSCI_A_UART_oversampling_BAUDRATE_generation //过采样
};
void ADC14Config (void);
int main (空)
{
/*停止看门狗*/
MAP_WDT_A_HOLDTimer();
/*用于 UART 的 P1.2和 P1.3。 P1.0、用于输出*/
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、
GPIO_PIN2 | GPIO_PIN3、GPIO_PRIMARY_MODULE_FUNCTION);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
针对中断的/* P1.0 *
MAP_GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN1);
MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、GPIO_PIN1);
MAP_GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN1);
MAP_Interrupt_setPriority (INT_PORT1、0x20);
MAP_Interrupt_enableInterrupt (INT_Port1);
/*初始化变量*/
curADCResult = 0;
/*设置闪存等待状态*/
MAP_FlashCtl_setWaitState (FLASH_BANK0、2);
MAP_FlashCtl_setWaitState (FLASH_BANK1、2);
/*将 DCO 设置为12MHz */
MAP_PCM_setPowerState (PCM_AM_LDO_VCORE1);
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 12);
/*启用 FPU 进行浮点运算*/
map_fpu_enableModule();
MAP_FPU_enableLazyStacking();
/* ADC14配置*/
ADC14Config();
/* USCIA0配置*/
UART_initModule (EUSCI_A0_BASE、uartConfig);
UART_enableModule (USCI_A0_BASE);
/*为 ADC14启用 中断*/
MAP_ADC14_enableInterrupt (ADC_INT0);
MAP_Interrupt_enableInterrupt (INT_ADC14);
MAP_Interrupt_setPriority (INT_ADC14、0x40);
MAP_Interrupt_enableMaster();
while (1)
{
MAP_PCM_gotoLPM0 ();
}
}
//![单个采样结果]
/* ADC 中断处理程序。 每当发生转换时都会调用此处理程序
*已针对 ADC_MEM0完成。
*
空 ADC14Config (空)
{
MAP_ADC14_enableModule();
/*初始化 ADC (MCLK/1/1)*/
MAP_ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_1、ADC_DIVIDER_1、
0);
/*配置 GPIO (5.5 A0)*/
MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、GPIO_PIN5、
GPIO_TICE_MODULE_FUNCTION);
/*配置 ADC 内存*/
MAP_ADC14_configureSingleSampleMode (ADC_MEM0、TRUE);
MAP_ADC14_configureConversionMemory (ADC_MEM0、ADC_VREFPS_AVCC_VREFNEG_VSS、
ADC_INPUT_A0、false);
/*配置采样计时器*/
MAP_ADC14_enableSampleTimer (ADC_AUTOMATE_DIOTIVation);
/*启用/切换转换*/
MAP_ADC14_enableConversion();
MAP_ADC14_toggleConversionTrigger ();
}
void ADC14_IRQHandler (void)
{
uint64_t status = MAP_ADC14_getEnabableInterruptStatus();
MAP_ADC14_clearInterruptFlag (status);
IF (ADC_INT0和状态)
{ADC14_getMultiSequenceResult (curADCResult1);
curADCResult = MAP_ADC14_getResult (ADC_MEM0);
正常 ADCRes=(curADCResult * 3.3)/16384;
UART_transmitData (EUSCI_A0_BASE、curADCResult>>8);
UART_transmitData (EUSCI_A0_BASE、curADCResult 和0xff);
if (标准化 ADCRes > 1.5)
GPIO_setOutputHighOnPin (GPIO_PORT_P1、GPIO_PIN0);
其他
GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);
}
}
空 Port1_IRQHandler (空)
{
uint32_t status;
STATUS = MAP_GPIO_getEnabledInterruptStatus (GPIO_PORT_P1);
MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、状态);
UART_transmitData (EUSCI_A0_BASE、0xff);
UART_transmitData (EUSCI_A0_BASE、0xff);
GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
}
===================================
希望你们对我有所回应。
提前感谢
此致!