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.

TMS320F280025C: 非FIFO模式下 如何开启SCI中断?

Part Number: TMS320F280025C

代码如下 开启后调试无法进入中断函数 但在阻塞接收下测试接收没问题

/**
 * main.c
 */
#include "device.h"
#include "driverlib.h"

#include <stdint.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include <stdio.h>
#include <math.h>

//
// Globals
//

//
// Send data for SCI-A
//
uint16_t TX_Buf[2]={0xAA,0xBB};

//
// Received data for SCI-A
//
uint16_t RX_Buf[2]={0xFF,0xFF};
//
// Function Prototypes
//
__interrupt void sciaRXISR(void);
void initSCIA(void);
void error(void);
//
// error - Function to halt debugger on error
//
void error(void)
{
    asm("     ESTOP0"); // Test failed!! Stop!
    for (;;);
}

void Init_GPIO(void)
{
    //
    // GPIO28 is the SCI Rx pin.
    //
    GPIO_setPinConfig(DEVICE_GPIO_CFG_SCIRXDA);
    GPIO_setDirectionMode(DEVICE_GPIO_PIN_SCIRXDA, GPIO_DIR_MODE_IN);
    GPIO_setPadConfig(DEVICE_GPIO_PIN_SCIRXDA, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(DEVICE_GPIO_PIN_SCIRXDA, GPIO_QUAL_ASYNC);

    //
    // GPIO29 is the SCI Tx pin.
    //
    GPIO_setPinConfig(DEVICE_GPIO_CFG_SCITXDA);
    GPIO_setDirectionMode(DEVICE_GPIO_PIN_SCITXDA, GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(DEVICE_GPIO_PIN_SCITXDA, GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode(DEVICE_GPIO_PIN_SCITXDA, GPIO_QUAL_ASYNC);
}


void initSCIA()
{
    //
    // 8 char bits, 1 stop bit, no parity. Baud rate is 9600.
    //
    SCI_setConfig(SCIA_BASE, DEVICE_LSPCLK_FREQ, 115200, (SCI_CONFIG_WLEN_8 |
                                                        SCI_CONFIG_STOP_ONE |
                                                        SCI_CONFIG_PAR_NONE));
    SCI_enableModule(SCIA_BASE);
    SCI_enableTxModule(SCIA_BASE);
    SCI_enableRxModule(SCIA_BASE);
    SCI_resetChannels(SCIA_BASE);

    //
    // RX Interrupts Enabled
    //
    SCI_enableInterrupt(SCIA_BASE, (SCI_INT_RXRDY_BRKDT));
//    SCI_disableInterrupt(SCIA_BASE, SCI_INT_RXERR);

    SCI_performSoftwareReset(SCIA_BASE);
}

void Init_SCI(void)
{
    //
    // Interrupts that are used in this example are re-mapped to
    // ISR functions found within this file.
    //
    Interrupt_register(INT_SCIA_RX, sciaRXISR);

    //
    // Initialize the Device Peripherals:
    //
    initSCIA();

    Interrupt_enable(INT_SCIA_RX);

    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);

    SCI_readCharNonBlocking(SCIA_BASE);
}

void delay_ms(uint32_t ms)
{
    while(ms--)
    {
        DEVICE_DELAY_US(1000);
    }
}

int main(void)
{
    //
    // Initializes system control, device clock, and peripherals
    //
    Device_init();
    Device_initGPIO();

    Init_GPIO();
    Init_SCI();
    //
    // Initializes PIE and clear PIE registers. Disables CPU interrupts.
    // and clear all CPU interrupt flags.
    //
    Interrupt_initModule();

    //
    // Initialize the PIE vector table with pointers to the shell interrupt
    // Service Routines (ISR).
    //
    Interrupt_initVectorTable();

    //
    // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
    //
    EINT;
    ERTM;

    delay_ms(10);
    SCI_writeCharArray(SCIA_BASE, TX_Buf, 2);
	while (1)
	{
	    delay_ms(500);

        SCI_writeCharArray(SCIA_BASE, RX_Buf, 1);
	}

}

__interrupt void sciaRXISR(void)
{
    SCI_readCharArray(SCIA_BASE, RX_Buf, 1);
//    SCI_clearOverflowStatus(SCIA_BASE);
//
//    SCI_clearInterruptStatus(SCIA_BASE, SCI_INT_RXRDY_BRKDT);
//    //
//    // Issue PIE ack
//    //
//    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);
}