This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:优先级中断 MSP432P401R

Guru**** 2538310 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/685445/msp432p401r-priority-interrupts-msp432p401r

器件型号: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);

===================================

希望你们对我有所回应。

提前感谢

此致!

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、

    中断优先级的函数初始化正确。 否、优先级意味着当 ADC 和 GPIO 中断同时发生时、首先处理一个中断。 请注意、USCI 的工作速率非常慢、为115200bps。 因此、数据传输延迟本身会导致偏差、因为数据传输所需的时间会更长、在此期间可能会发生多个中断。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amit Ashara、您好、感谢您的回复。 但我的问题是、当我按 P1.1 (从高到低转换)时、配置的 GPIO 中断不会发生。 当 MCU 正在处理 Port1_IRQHandler 时,是否发生 ADC14中断会导致数据尚未传输??
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、

    这在您的第一篇帖子中并不清楚。 现在、如果在中断处理程序上放置一个断点、然后按 P1.1 GPIO 开关、代码执行是否会在断点处停止?

    如果没有、则删除优先级功能、然后尝试。
    如果是、则中断处理程序按预期工作。 您需要确保使用示波器或逻辑分析仪按预期切换 UART 引脚
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我会尝试一下、感谢您的帮助。 这对像我这样的任何初学者都非常有帮助。
    此致。