CORTEX_M4_0: ошибка возникает в коде GPIO в режиме отладки - PullRequest
1 голос
/ 18 января 2020

У меня возникает эта ошибка всякий раз, когда я пытаюсь отладить свою программу с использованием кода Composer Studio V 9.1.0:

CORTEX_M4_0: Ошибка чтения блока памяти при 0x400043f c на странице 0 of Длина 0x4: Произошла ошибка порта отладки

Я использую панель запуска Texas Instruments TM4C123GXL, и она подключается к моему ноутбуку через кабель USB. Я могу успешно собрать свою программу, но ошибки появляются всякий раз, когда я пытаюсь отладить свою программу. Предполагается, что моя программа использует прерывания SysTick для постоянного изменения напряжения на модуле мембранного переключателя Elegoo, чтобы программа могла видеть, какую кнопку я нажал. Я не уверен на 100%, что правильно инициализировал порты ввода и вывода GPIO, но ошибки появляются до того, как программа даже запускается и достигает моего основного l oop.

Здесь это скриншот кода и мои ошибки:

My code

Вот код:

void SysTickInit()
{
    NVIC_ST_CTRL_R = 0;
    NVIC_ST_RELOAD_R = 0x0C3500; // delays for 10ms (800,000 in hex) '0x0C3500' is
    // original correct
    NVIC_ST_CURRENT_R = 0;
    NVIC_ST_CTRL_R = 0x07; // activates the systick clock, interrupts and enables it again.
}

void Delay1ms(uint32_t n)
{
    uint32_t volatile time;
    while (n)
    {
        time = 72724 * 2 / 91; // 1msec, tuned at 80 MHz
        while (time)
        {
            time--;
        }
        n--;
    }
}

void SysTick_Handler(void) // this function is suppose to change which port
// outputs voltage and runs every time systick goes
// to zero
{
    if (Counter % 4 == 0)
    {
        Counter++;
        GPIO_PORTA_DATA_R &= 0x00; // clears all of port A ( 2-5)
        GPIO_PORTA_DATA_R |= 0x04; // activates the voltage for PORT A pin 2
        Delay1ms(990);
    }
    else if (Counter % 4 == 1)
    {
        Counter++;
        GPIO_PORTA_DATA_R &= 0x00; // clears all of port A (2-5)
        GPIO_PORTA_DATA_R |= 0x08; // activates voltage for PORT A pin 3
        Delay1ms(990);
    }
    else if (Counter % 4 == 2)
    {
        Counter++;
        GPIO_PORTA_DATA_R &= 0x00; // clears all of port A (2-5)
        GPIO_PORTA_DATA_R |= 0x10; // activates voltage for PORT A pin 4
        Delay1ms(990);
    }
    else if (Counter % 4 == 3)
    {
        Counter++;
        GPIO_PORTA_DATA_R &= 0x00; // clears all of port A (2-5)
        GPIO_PORTA_DATA_R |= 0x20; // activates voltage for PORT A pin 5
        Delay1ms(990);
    }
}

void KeyPadInit()
{
    SYSCTL_RCGCGPIO_R |= 0x03; // turns on the clock for Port A and Port B
    while ((SYSCTL_RCGCGPIO_R) != 0x03) { }; // waits for clock to stabilize

    GPIO_PORTA_DIR_R |= 0x3C; // Port A pins 2-5 are outputs (i think)
    GPIO_PORTA_DEN_R |= 0x3C; // digitally enables Port A pins 2-5

    GPIO_PORTA_DIR_R &= ~0xC0; // makes Port A pin 6 and 7 inputs
    GPIO_PORTA_DEN_R |= 0XC0; // makes Port A pin 6 and 7 digitally enabled

    GPIO_PORTB_DIR_R &= ~0X03; // makes Port B pin 0 and 1 inputs
    GPIO_PORTB_DEN_R |= 0x03; // makes PortB pin 0 and 1 digitally enabled
}

1 Ответ

0 голосов
/ 06 февраля 2020

Я узнал, почему произошла моя ошибка. Я пошел к своему профессору, и у него было специальное устройство, чтобы проверить, работают ли мои контакты на панели запуска. Оказывается, некоторые из выводов, которые я использовал на портах A и B, потребляли слишком много тока, и, согласно устройству, изготовленному на заказ, отключились. Другими словами, эта ошибка возникла из-за того, что среда IDE обнаружила, что некоторые мои контакты больше не работают.

...