⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tms470r1a256_spi_03.c

📁 tmp470开发板的源程序
💻 C
字号:
//*****************************************************************************
//  TMS470 Demo -  SPI Sample Program 5pin loopback
//
// This is a SPI 5 pin - RTI Interrupt configuration.
// Data from a table is transmitted from SPI 1 based on the RTI timing. Data
// is received on SPI2 and then the leds are lit to reflect the SPI data.
// This is a 5 pin configuration using SOMI SIMO SPICLK SCS ENA pins.  Clock speed 12 Mhz.
// Data size is 16 bits. These signals are connected on the same board.
//
//                              TMS-FET470A256
//                             _________________
//                            |                 |
//                         /|\|            OSCIN|-
//                          | |                 | 12MHz
//                          --|PLLDIS     OSCOUT|-
//                            |                 |
//                            |----- SPI1 ------|
//                         ---|SOMI         SIMO|---
//                            |                 |
//                         ---|ENA        SPICLK|---
//                            |                 |
//                            |              SCS|---
//                            |                 |
//                            |----- SPI2 ------|
//                         ---|SIMO         SOMI|---
//                            |                 |
//                         ---|SPICLK        ENA|---
//                            |                 |
//                         ---|SCS              |
//                            |                 |
//                            |-----------------|
//                            |             HET0|--- LED1
//                            |             ... |
//                            |            HET31|--- LED16
//                            |_________________|
//
//
//
//
//  J. Mangino/A. Dannenberg
//  Texas Instruments, Inc
//  January 2005
//  Built with IAR Embedded Workbench Version: 4.11A
//******************************************************************************

#include <intrinsic.h>
#include "iotms470r1a256.h"
#include "tms470r1a256_bit_definitions.h"
// LED moving pattern codes.
 int led_table[] = {
   0x0000,0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000, 0xffff
};

 unsigned int datp;
   int* ip;

void TMS470LedSet(unsigned int mask)
{
  unsigned int tmp;

  mask ^= 0xFFFF;
  tmp  = (mask << 16)& 0x80000000;
  tmp |= (mask << 10)& 0x01000000;
  tmp |= (mask << 8) & 0x003c0000;
  tmp |= (mask << 4) & 0x00003c00;
  tmp |= (mask << 3) & 0x000001c0;
  tmp |= (mask << 2) & 0x00000010;
  tmp |= (mask << 1) & 0x00000004;
  tmp |=  mask       & 0x00000001;
  HETDOUT = tmp ;
}

 void COMP1_irq_handler()
{
  RTICINT &= ~CMP1FLAG;   // interrupt control, clear CMP1

  if (*ip != 0xffff)
  {
  SPI1DAT1 = *ip;
  SPI2DAT0 = 0x00;       // data to set ENA low
  ip++;
}
 else
 {
  ip = led_table;
  SPI1DAT1 = *ip;
  SPI2DAT0 = 0x00;        // data to set ENA low
  ip++;
  }
}

void SPI2_irq_handler()
{
   datp = SPI2BUF;
   TMS470LedSet(datp);
}

//------------------------------------------------------------------------------
// TMS470R1A256 Standard Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = IRQV
__irq __arm void irq_handler(void)
{
   switch((0xff & IRQIVEC)-1)
  {
   case CIM_COMP1  : COMP1_irq_handler(); break;
   case CIM_SPI2   : SPI2_irq_handler(); break;
  }
}
void main(void)
{
// Set up peripheral registers.
// First disable interrupts.
  __disable_interrupt();
  ip = led_table;
    // Setup system.
  PCR = CLKDIV_4;                                      // ICLK = SYSCLK/4
  PCR |= PENABLE;                                      // enable peripherals

  REQMASK = (1 << CIM_COMP1) + (1 << CIM_SPI2);        // Enable SPI Interrupt mask

  // Setup periodic interrupt using RTI with RTICMP1
  RTICNTEN = CNTEN_NOCNT;                       // Stop counting
  RTICNTR = 0x00;                           // clear 21-bits CNTR

  // Setup periodic interrupt timer
  // CMP1 used to generate  interrupt.
  RTIPCTL = 0x3;                         // preload 11-bits MOD
  RTICMP1 = 0xfffff;                     //
  RTICNTL = 0x00;                        // clear and disable tap

  // interrupt control, clear CMP1 and enable CMP1 interrupt
  RTICINT = 0x00;
  RTICINT |= CMP1ENA;

  // Start count, CNTR and MOD will count in both USER and SYSTEM mode
  RTICNTEN = CNTEN_UP;

   //__enable_interrupt();                 // Enable Interrupts

  HETDIR  = 0xFFFFFFFF;                  // Set HET as GIO outputs
  HETDOUT = 0x813c3dd5;                  // Output off
  HETDOUT = 0x00000000;                  // Output on
  HETDOUT = 0x813c3dd5;                  // Output off

  // SPI 1 Setup

  SPI1CTRL1= CHARLEN_16 + PRESCALE_1;                        // char len = 16 prescale =1 spi baud =Iclk/2
  SPI1CTRL2 = MASTER + CLKMOD;                               // Master mode
  SPI1CTRL3 = 0x00;                                          // Disable SPI1 Interrupt
  SPI1PC6=SOMI_FUN + SIMO_FUN + CLK_FUN + SCS_FUN + ENA_FUN; // SOMI SIMO SPICLK SCS ENA enables

   // SPI 2 Setup

  SPI2CTRL1= CHARLEN_16 + PRESCALE_1;                         // char len = 16 prescale = 1 spi baud =Iclk/2
  SPI2CTRL2 = 0x00;                                           // Slave mode
  SPI2CTRL3 = RX_INT_EN;                                      // Enable SPI1 Interrupt
  SPI2PC6= SOMI_FUN + SIMO_FUN + CLK_FUN + SCS_FUN + ENA_FUN; // SOMI SIMO SPICLK SCS ENA enables


  SPI1CTRL2 |= SPIEN;                    // Enable  SPI1
  SPI2CTRL2 |= SPIEN;                    // Enable  SPI2

  datp = SPI1BUF;                        // Dummy Read to clear buffer
  datp = SPI2BUF;                        // Dummy Read to clear buffer


   __enable_interrupt();                 // Enable Interrupts
  SPI1DAT0 = 0x00f0;
  // Loop forever.
  while (1);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -