📄 tms470r1b1m_sci2_03.c
字号:
//*******************************************************************************
// TMS470 Demo - SCI2 9600 GIOA To HET Byte Exchange
//
// Description; Transmit GIODINA as a character using SCI2 TX and receive a
// character using SCI2 RX. RX'ed character bits 0x04 and 0x08 transfered to
// HET0 and HET1 respectively. RX interrupts is used.
//
// SYSCLK = MCLK = ACLK = 8 x 7.3728MHz = 58.9824MHz
// ICLK = SYSCLK / 2 = 29.4912MHz
//
// Baud rate divider with 29.4912MHz ICLK @9600 =
// 29.4912MHz/(8*9600)-1 = 0x17f
//
// //*An external 7.3728MHz XTAL with proper load caps is required*//
//
// TMS-FET470B1M
// -----------------
// +--|PLLDIS OSCIN|-
// | | | 7.3728MHz
// -+- | OSCOUT|-
// | |
// --->|GPIOA SCI2TX|------------>
// --->| | 9600 - 8N1
// | SCI2RX|<------------
// | HET0|---> LED
// | HET1|---> LED
//
// A.Dannenberg / J.Mangino
// Texas Instruments, Inc
// July 29th 2005
// Built with IAR Embedded Workbench Version: 4.30A
//******************************************************************************
#include <intrinsic.h>
#include "iotms470r1b1m.h"
#include "tms470r1b1m_bit_definitions.h"
void main(void)
{
PCR = CLKDIV_2; // ICLK = SYSCLK / 2
GCR = ZPLL_CLK_DIV_PRE_1; // SYSCLK = 8 x fOSC
PCR |= PENABLE; // Enable peripherals
HETDIR = 0xFFFFFFFF; // HETx Output direction
HETDOUT = 0xFFFFFFFF;
SCI2CTL3 &= ~SW_NRESET; // Reset SCI state machine
SCI2CCR = TIMING_MODE_ASYNC + CHAR_8; // Async, 8-bit Char
SCI2CTL1 |= RXENA; // RX enabled
SCI2CTL2 |= TXENA; // TX enabled
SCI2CTL3 |= CLOCK + RX_ACTION_ENA; // Internal clk, RX int
SCI2MBAUD = 0x01; // 29.4912MHz/(8*9600)-1
SCI2LBAUD = 0x7f;
SCI2PC2 |= RX_FUNC; // SCIRX is the SCI receive pin
SCI2PC3 |= TX_FUNC; // SCITX is the SCI transmit pin
SCI2CTL3 |= SW_NRESET; // Configure SCI2 state machine
REQMASK = (1 << CIM_SCI2RX); // Enable SCI2RX int channel
__enable_interrupt(); // Enable interrupts
for (;;)
{
SCI2TXBUF = GIODINA;
for (volatile int i = 0; i < 10000; i++);
}
}
//------------------------------------------------------------------------------
// TMS470R1B1M Standard Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = IRQV
__irq __arm void irq_handler(void)
{
switch ((0xff & IRQIVEC) - 1)
{
case CIM_SCI2RX :
if (!(SCI2RXBUF & 0x4))
HETDCLR = 0x1;
else
HETDSET = 0x1;
if (!(SCI2RXBUF & 0x8))
HETDCLR = 0x2;
else
HETDSET = 0x2;
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -