lindabell 发表于 2011-3-26 08:46:59

DSP2812 官方例程串口设置好像不对??

// Enable interrupts required for this example
   PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE block
   PieCtrlRegs.PIEIER9.bit.INTx1=1;   // PIE Group 9, INT1
   PieCtrlRegs.PIEIER9.bit.INTx2=1;   // PIE Group 9, INT2
   IER = 0x100;        // Enable CPU INT         ???????????????????????
   EINT;


问号处应该是IER = 1<<(9-1);        // Enable CPU INT


后加:
   我理解错了IER = 0x100;和IER = (1<<9);是一样的,刚才把0x100看成是二进制了。大意啊

lindabell 发表于 2011-3-26 08:48:07

http://cache.amobbs.com/bbs_upload782111/files_37/ourdev_625550DO638S.jpg
(原文件名:PIE.jpg)

lindabell 发表于 2011-3-26 09:12:57

在主程序中没有发送数据,只是在发送中断时发送数据;既然这样为什么不发送数据也能进入发送中断呢,请大侠解释!!!!

程序:
// TI File $Revision: /main/4 $
// Checkin $Date: July 2, 2007   11:28:28 $
//###########################################################################
//
// FILE:   Example_281xSci_FFDLB_int.c
//
// TITLE:DSP281x Device SCI Digital Loop Back porgram.
//
//
// ASSUMPTIONS:
//
//         This program requires the DSP281x V1.00 header files.
//         As supplied, this project is configured for "boot to H0" operation.
//
//         Other then boot mode pin configuration, no other hardware configuration
//         is required.
//
// DESCRIPTION:
//
// This program is a SCI example that uses the internal loopback of
// the peripheral.Both interrupts and the SCI FIFOs are used.
//
// A stream of data is sent and then compared to the recieved stream.
//
// The SCI-A sent data looks like this:
// 00 01 02 03 04 05 06 07
// 01 02 03 04 05 06 07 08
// 02 03 04 05 06 07 08 09
// ....
// FE FF 00 01 02 03 04 05
// FF 00 01 02 03 04 05 06
// etc..
//
//
// The SCI-B sent data looks like this:
// FF FE FD FC FB FA F9 F8
// FE FD FC FB FA F9 F8 F7
// FD FC FB FA F9 F8 F7 F6
// ....
// 01 00 FF FE FD FC FB FA
// 00 FF FE FD FC FB FA F9
// etc..
//
// Both patterns are repeated forever.
//
// Watch Variables:
//
//   SCI-A         SCI-B
//   ----------------------
//   sdataA          sdataB         Data being sent
//   rdataA          rdataB         Data received
//   rdata_pointA    rdata_pointB   Keep track of where we are in the datastream
//                                    This is used to check the incoming data
//###########################################################################
// $TI Release: DSP281x C/C++ Header Files V1.20 $
// $Release Date: July 27, 2009 $
//###########################################################################


#include "DSP281x_Device.h"   // DSP281x Headerfile Include File
#include "DSP281x_Examples.h"   // DSP281x Examples Include File

#define CPU_FREQ        150E6
#define LSPCLK_FREQCPU_FREQ/4
#define SCI_FREQ        9600//100E3      //波特率
#define SCI_PRD        (LSPCLK_FREQ/(SCI_FREQ*8))-1

// Prototype statements for functions found within this file.
interrupt void sciaTxFifoIsr(void);
interrupt void sciaRxFifoIsr(void);

void scia_fifo_init(void);
void error(void);

// Global variables
Uint16 sdataA;    // Send data for SCI-A
Uint16 sdataB;    // Send data for SCI-B
Uint16 rdataA;    // Received data for SCI-A
Uint16 rdataB;    // Received data for SCI-A
Uint16 rdata_pointA; // Used for checking the received data
Uint16 rdata_pointB;


void main(void)
{
   Uint16 i;

// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
   InitSysCtrl();

// Step 2. Initalize GPIO:
// This example function is found in the DSP281x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();
// Setup only the GP I/O only for SCI-A and SCI-B functionality
   EALLOW;
   GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1;
   GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1;
   GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4 = 1;
   GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1;
   EDIS;

// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
   DINT;

// Initialize PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP281x_PieCtrl.c file.
   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.This is useful for debug purposes.
// The shell ISR routines are found in DSP281x_DefaultIsr.c.
// This function is found in DSP281x_PieVect.c.
   InitPieVectTable();

// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
   EALLOW;        // This is needed to write to EALLOW protected registers
   PieVectTable.RXAINT = &sciaRxFifoIsr;
   PieVectTable.TXAINT = &sciaTxFifoIsr;
   EDIS;   // This is needed to disable write to EALLOW protected registers


// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP281x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
   scia_fifo_init();// Init SCI-A


// Step 5. User specific code, enable interrupts:

// Init send data.After each transmission this data
// will be updated for the next transmission
   for(i = 0; i<8; i++)
   {
      sdataA = i;
   }

   rdata_pointA = sdataA;

// Enable interrupts required for this example
   PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE block
   PieCtrlRegs.PIEIER9.bit.INTx1=1;   // PIE Group 9, INT1
   PieCtrlRegs.PIEIER9.bit.INTx2=1;   // PIE Gro

maza 发表于 2011-11-1 10:34:18

请问官方例程是从哪下的啊?
页: [1]
查看完整版本: DSP2812 官方例程串口设置好像不对??