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

📄 tms470r1a256_spi_07.c

📁 tmp470开发板的源程序
💻 C
字号:
//*****************************************************************************
//  TMS470 Demo -  SPI Sample Program slave 3pin int
//
// This is a SPI 3 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 3 pin configuration
// using SIMO SPICLK SOMI pins. Clock speed 12 Mhz.
//
//
//
//                              TMS-FET470A256
//                             _________________
//                            |                 |
//                         /|\|            OSCIN|-
//                          | |                 | 12MHz
//                          --|PLLDIS     OSCOUT|-
//                            |                 |
//                         ---|SPICLK       SIMO|---
//                            |                 |
//                            |             SOMI|---
//                            |                 |
//                            |             HET0|--- LED1
//                            |             ... |
//                            |            HET31|--- LED16
//                            |_________________|
//
//
//
//  J. Mangino/A. Dannenberg
//  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);
}
//------------------------------------------------------------------------------
// 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;    // SOMI SIMO SPICLK  enables
  SPI1CTRL2 |= SPIEN;                        // Enable  SPIs

  datp = SPI1BUF;                            // Dummy Read to clear buffer

  __enable_interrupt();                      // Enable Interrupts

  // Loop forever.
  while (1);

  }

⌨️ 快捷键说明

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