📄 systeminit.c
字号:
//******************************************************************************
// MSP-FET430P140 Demo -
//
// Description:
//
//
//
// MSP430F135
//
//
//
//
// | | | | | | | | | | | | | | | | | | |
// ----------------------------------------
// RST --|58 |--
// XIN --|8 32.768khz |--
// XOUT --|9 |--
// | |--
// | |--
// | |--
// | |--
// | |--
// | |--
// | |--
// | |--
// | |--
// | |--P4.2/TB2|-> CCR2 25% PWM
// | |--P4.1/TB1|-> CCR1 75% PWM
// | |--P4.0/TB0
// | |--
// | |--
// | |--P3.5|<------9600 - 8N1
// | |--P3.4|------>
// ----------------------------------------
// | | | | | | | | | | | | | | | | | | |
//
//
//
//
// may 2008
// Built with IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include <msp430x13x.h>
void systeminit(void)
{
//================================
// systemclockinit
//================================
DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO
BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
BCSCTL2 |= SELS; // SMCLK = XT2
//================================
// systemclockinit
//================================
/*
BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
*/
//================================
// Watchdog Init
// Watchdog mode
// WDT is clocked by fSMCLK (assumed 1MHz)
//================================
/*
WDT_MRST_32; //32ms interval (default)
*/
//================================
// Watchdog Init
// WDT-interval times way
// WDT is clocked by fSMCLK (assumed 1MHz)
//================================
WDTCTL = WDT_MDLY_8; // Set Watchdog Timer interval to 8ms
IE1 |= WDTIE; // Enable WDT interrupt
//================================
// UART Init
//================================
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |=BIT4; // P3.4=TXD
P3DIR &=~BIT5; // P3.5=RXD
ME1 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character, SWRST = 1
UTCTL0 |= SSEL1 + SSEL0 + URXSE; // UCLK = SMCLK, start edge detect
UBR00 = 0xD0; // 9600 from 2Mhz
UBR10 = 0x00;
UMCTL0 = 0x00; // No modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0;
//===============================
// time TAInit
//===============================
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 50000;
TACTL = TASSEL_2 + MC_2; // SMCLK, contmode
//================================
// time TBInit
//================================
//================================
//
//================================
//================================
//
//================================
//================================
// ADC12 Init
//================================
//================================
// P1Init
//================================
/*
P1DIR=
P1OUT=
P1IFG=
P1IES=
P1IE =
P1SEL=
*/
//================================
// P2Init
// P2 output
//================================
P2DIR |=0xff;
P2OUT &=0x00;
/*
P2IFG=
P2IES=
P2IE =
P2SEL=
*/
//================================
// P3Init
// 1*8key p3.0-p3.7 uptovdd
//================================
P3DIR=0x00;
/*
P3OUT=
P3SEL=
*/
//================================
// P4Init
//================================
/*
P4DIR=
P4OUT=
P4SEL=
*/
//================================
// P5Init
//================================
/*
P5DIR=
P5OUT=
P5SEL=
*/
//================================
// P6Init
//================================
/*
P6DIR=
P6OUT=
P6SEL=
*/
//================================
// open intInit
//================================
// _EINT();
//================================
}
void ADC12Init(void)
{
P6SEL = 0x0F; // Enable A/D channel inputs
ADC12CTL0 = ADC12ON+MSC+SHT0_8; // Turn on ADC12, extend sampling time
// to avoid overflow of results
ADC12CTL1 = SHP+CONSEQ_3; // Use sampling timer, repeated sequence
ADC12MCTL0 = INCH_0; // ref+=AVcc, channel = A0
ADC12MCTL1 = INCH_1; // ref+=AVcc, channel = A1
ADC12MCTL2 = INCH_2; // ref+=AVcc, channel = A2
ADC12MCTL3 = INCH_3+EOS; // ref+=AVcc, channel = A3, end seq.
ADC12IE = 0x08; // Enable ADC12IFG.3
ADC12CTL0 |= ENC; // Enable conversions
ADC12CTL0 |= ADC12SC; // Start conversion
}
void TAInit(void)
{
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 5000;
TACTL = TASSEL_2 + MC_2; // SMCLK, contmode
}
void TBInit(void)
{
}
void UARTInit(void)
{
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |=BIT4; // P3.4=TXD
P3DIR &=~BIT5; // P3.5=RXD
ME1 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character, SWRST = 1
UTCTL0 |= SSEL1 + SSEL0 + URXSE; // UCLK = SMCLK, start edge detect
UBR00 = 0xD0; // 9600 from 2Mhz
UBR10 = 0x00;
UMCTL0 = 0x00; // No modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0;
}
void WatchdogInit(void)
{
WDTCTL = WDT_MDLY_0_5; // Set Watchdog Timer interval to 0.5ms
IE1 |= WDTIE;
}
void SystemclockInit(void)
{
DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO
BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
BCSCTL2 |= SELS;
}
/*eof*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -