📄 tms470r1b1m_i2c_03.c
字号:
//******************************************************************************
// TMS470 Demo - I2C Sample Program I2C2
//
// This is a I2C2 Slave Interrupt configuration.
// Data is recieved from I2C2 and displayed on the LED array.
// Clock speed is 60 MHz. Data size is 8 bits. These signals are connected on
// the same board.
//
//
// TMS-FET470B1M
// _________________
// | |
// /|\| OSCIN|-
// | | | 7.5MHz
// --|PLLDIS OSCOUT|-
// | |
// |----- I2C2 ------|
// | SCL |---
// | |
// | SDA |---
// |_________________|
//
//
//
//
// J. Mangino / A. Dannenberg
// Texas Instruments, Inc
// August 2005
// Built with IAR Embedded Workbench Version: 4.30A
//******************************************************************************
#include <intrinsic.h>
#include "iotms470r1b1m.h"
#include "tms470r1b1m_bit_definitions.h"
unsigned int datp;
void TMS470LedSet(unsigned int mask)
{
GIODOUTE = mask & 0xFF;
HETDOUT = (mask & 0xFF00)>>8;
}
void I2C2_irq_handler()
{
datp = I2C2DRR&0XFF;
TMS470LedSet(datp);
}
//------------------------------------------------------------------------------
// TMS470R1B1M Standard Interrupt Handler
//------------------------------------------------------------------------------
__irq __arm void irq_handler(void)
{
switch((0xff & IRQIVEC)-1)
{
case CIM_I2C2 : I2C2_irq_handler(); break;
}
}
void main(void)
{
// Set up peripheral registers.
// First disable interrupts.
__disable_interrupt();
// Setup system.
PCR = CLKDIV_2; // ICLK = SYSCLK/2
PCR |= PENABLE; // enable peripherals
GCR = ZPLL_CLK_DIV_PRE_1; // SYSCLK = 8 x fOSC
REQMASK = (1 << CIM_I2C2); // Enable I2C Interrupt mask
HETDIR = 0xff; // Set HET as GIO outputs
HETDOUT = 0xff; // Output on
HETDOUT = 0x00; // Output off
HETDOUT = 0xff; // Output on
GIODIRE = 0xff; // Set GIO outputs
GIODOUTE =0xff; // Output on
//I2C 2 Set up
I2C2PSC = 2; // Module clock frequency
// I2CCLK = ICLK / (PSC + 1)
// I2CCLK = 10 MHz
I2C2CKL = 38; // Low clock period
I2C2CKH = 38; // High clock period
I2C2OAR = 0x48; // Set address 0x48
I2C2IMR = 0x08; // Interrupts receive enabled
I2C2CNT = 1; // Set count = 1
I2C2SAR = 0x56; // Set address 0x56
I2C2PFNC = 0;
I2C2DIR = SDAFUNC+SCLFUNC; // Set I2C Functions
I2C2MDR |= NIRS; // Clear reset
__enable_interrupt(); // Enable Interrupts
// Loop forever.
while (1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -