📄 tms470r1b1m_sci1_02.c
字号:
//*******************************************************************************
// TMS470 Demo - SCI1 19200 Transmit String
//
// Description; Transmit the string "Hello World" using SCI1. The RTI tap
// interrupt enables the SCI1 TX interrupt allowing transmission of string.
// At completion of string transmission, the SCI1 ISR disables further
// transmission.
// RTI tap divides ICLK/2^20
//
// SYSCLK = MCLK = ACLK = 8 x 7.3728MHz = 58.9824MHz
// ICLK = SYSCLK / 2 = 29.4912MHz
//
// Baud rate divider with 29.4912MHz ICLK @19200 =
// 29.4912MHz/(8*19200)-1 = 0xbf
//
// //*An external 7.3728MHz XTAL with proper load caps is required*//
//
// TMS-FET470B1M
// -----------------
// | OSCIN|-
// | | 7.3728MHz
// +--|PLLDIS OSCOUT|-
// | | |
// -+- | SCI1TX|------------>
// | | 19200 - 8N1
// | SCI1RX|<------------
//
// 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"
const char string1[] = { "Hello World\r\n" };
unsigned int i = 0;
void main(void)
{
PCR = CLKDIV_2; // ICLK = SYSCLK / 2
GCR = ZPLL_CLK_DIV_PRE_1; // SYSCLK = 8 x fOSC
PCR |= PENABLE; // Enable peripherals
SCI1CTL3 &= ~SW_NRESET; // Reset SCI state machine
SCI1CCR = TIMING_MODE_ASYNC + CHAR_8; // Async, 8-bit Char
SCI1CTL1 |= RXENA; // RX enabled
SCI1CTL2 |= TXENA; // TX enabled
SCI1CTL3 |= CLOCK; // Internal clock
SCI1LBAUD = 0xbf; // 29.4912MHz/(8*19200)-1
SCI1PC2 |= RX_FUNC; // SCIRX is the SCI receive pin
SCI1PC3 |= TX_FUNC; // SCITX is the SCI transmit pin
SCI1CTL3 |= SW_NRESET; // Configure SCI1 state machine
RTIPCTL = 4; // Preload modulo counter
RTICNTL |= TAPENA; // Enable TAP interrupt
REQMASK = (1 << CIM_SCI1TX)+(1 << CIM_TAP); // Enable SCI1TX, RTI tap chan's
__enable_interrupt(); // Enable interrupts
for (;;) {}
}
//------------------------------------------------------------------------------
// TMS470R1B1M Standard Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = IRQV
__irq __arm void irq_handler(void)
{
switch ((0xff & IRQIVEC) - 1)
{
case CIM_TAP:
i = 0;
SCI1TXBUF = string1[i++]; // First char to TX buffer
SCI1CTL3 |= TX_ACTION_ENA; // Enable TX interrupt
RTICNTL &= ~TAPFLAG; // Clear TAP flag
break;
case CIM_SCI1TX:
if (i < sizeof string1-1)
SCI1TXBUF = string1[i++];
else
SCI1CTL3 &= ~TX_ACTION_ENA; // Disable TX interrupt
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -