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

📄 tms470r1a256_spi_09.c

📁 tmp470开发板的源程序
💻 C
字号:
//*****************************************************************************
//  TMS470 Demo -  SPI Sample Program slave 5pin int
//
// This is a SPI 5 pin - Slave Mode - Interrupt configuration. Data is received
// from SPI 1 After recieving SPI data an interrupt is generated that lights
// leds on the IAR TMS470R1VF346 EVM. This is a 5 pin configuration
// using SIMO SPICLK SOMI SCS ENA pins. Clock speed 12 Mhz.
//
//
//
//                              TMS-FET470A256
//                             _________________
//                            |                 |
//                         /|\|            OSCIN|-
//                          | |                 | 12MHz
//                          --|PLLDIS     OSCOUT|-
//                            |                 |
//                         ---|SPICLK       SIMO|---
//                            |                 |
//                         ---|SCS          SOMI|---
//                            |                 |
//                            |              ENA|---
//                            |                 |
//                            |             HET0|--- LED1
//                            |             ... |
//                            |            HET31|--- LED16
//                            |_________________|
//
//
//
//  J. Mangino
//  Texas Instruments, Inc
//  January 2005
//  Built with IAR Embedded Workbench Version: 4.20A
//******************************************************************************

#include <intrinsic.h>
#include "iotms470r1a256.h"
#include "tms470r1a256_bit_definitions.h"

  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 SPI1_irq_handler()
{
   datp = SPI1BUF;
   TMS470LedSet(datp);
   SPI1DAT0 = 0x00;                       // data to set ENA low
}

//------------------------------------------------------------------------------
// TMS470R1A256 Standard Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = IRQV
__irq __arm void irq_handler(void)
{
   switch((0xff & IRQIVEC)-1)
  {
   case CIM_SPI1  : SPI1_irq_handler(); break;
  }
}

void main(void)
{

  // Set up peripheral registers.
  // First disable interrupts.
  __disable_interrupt();

    // Setup system.
  PCR = CLKDIV_4;                          // ICLK = SYSCLK/4
  PCR |= PENABLE;                          // enable peripherals

  REQMASK=(1 << CIM_SPI1);                 // Enable SPI Interrupt mask

  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 = 0x00;                          // Slave mode
  SPI1CTRL3 = RX_INT_EN;                     // Enable SPI1 Interrupt
  SPI1PC6= SOMI_FUN + SIMO_FUN + CLK_FUN + SCS_FUN + ENA_FUN;    // SIMO SPICLK ENA enables
  SPI1CTRL2 |= SPIEN;                        // Enable  SPIs

  datp = SPI1BUF;                            // Dummy Read to clear buffer

  __enable_interrupt();                      // Enable Interrupts
   SPI1DAT0 = 0x00;                          // Initial data to set ENA low
  // Loop forever.
  while (1);

  }

⌨️ 快捷键说明

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