?? main.c
字號:
#include <msp430x14x.h>
#include "main.h"
#include "mcp2515.h"
/********************************************** 旋鈕參數 *********************************************/
u8_t encoderFlag = 0; // P1.0~P1.7中斷標志位
u8_t BPhase, encoderOft; //
u8_t LedStatus[3] = { 0x01,0x02,0x03 };
u8_t StoreData[8];
ROTSTRUCT RotNO[8];
u8_t RegResult = 0;
void ReadRotData( u8_t IntFlag, u8_t BPhaseData );
void LedOperation( u8_t LedNO, u8_t Operation );
void SPI1Init(void);
void SPI0Init(void);
void delay(u32_t delaytime);
/* 初始狀態狀態 */
STATE stateMachine = IDLE;
u8_t udata[2];
int temp=0;
void main( void )
{
// 停止看門狗定時器
WDTCTL = WDTPW + WDTHOLD;
// 初始化系統時鐘
Init_clk();
// 初始化 MSP430F149的端口
portConfig();
// SPI0端口中斷,用于驅動CAN總線
SPI0Init();
// CAN總線接口芯片初始化設置
MCP2515_Init();
// 中斷允許
__enable_interrupt();
LedStatus[0] = 0x01;
LedStatus[1] = 0x02;
LedStatus[2] = 0x03;
P6SEL = 0x00;
P6DIR |= 0xff;
P6OUT = 0xff;
while(1)
{ // RX0BUF,0x80優先級,
//sendStandardFrame(0x00,0x80,0x20,0x01,0x01,0xad,0x05,LedStatus);
delay(1000000);
}
}
/************************************************************************************************
*********************************** 以下是系統初始化函數 **************************************
**********************************************************************************************/
/* 初始化430時鐘 */
void Init_clk()
{
BCSCTL1&=~XT2OFF; // XT2OFF位置0,打開XT2
do
{
IFG1&=~OFIFG; // 清除振蕩失效OFIFG標志位
for(u8_t m=100;m>0;m--); // 延時等待50us以上
}
while(IFG1&OFIFG);
BCSCTL2=SELM_2+SELS+DIVS_3; //選擇XT2作為MCLK,SMCLK,分頻8,SMCLK=MCLK=1M
}
/* 430端口配置 */
void portConfig()
{
/* ADC12 引腳配置 */
//P6SEL |= 0xff; //已設置為8路AD轉換器
/* 旋轉編碼器引腳設置(旋鈕中斷配置在按下按鍵之后使能) */
//P2SEL = 0x00; //SB
//P2IE |= 0x80; //允許P2.7中斷
//P2IFG = 0x00;
//P2IES |= 0x80; //下降沿中斷
/* MCP2515 引腳配置 */
P3SEL = 0x0e; // P3.1,P3.2,P3.3選擇引腳為外圍功能模塊
P3DIR |= 0x11; // P3.4,P3.0
P3OUT |= 0x10;
P2SEL = 0x00; //SB
P2DIR = 0x00; //P2.7設置成輸入模式
P2IE = 0x80; //允許P2.7中斷
P2IES = 0x80; //下降沿中斷
P2IFG = 0x00;
}
/*******************************************************************
* 函數功能: SPI0端口初始化,用于驅動CAN 接口芯片
*******************************************************************/
void SPI0Init(void)
{
U0CTL |= SWRST;
U0CTL |= ( CHAR | MM | SYNC ); //8位數據、主模式、SPI模式。
U0TCTL |= ( STC | SSEL1 | CKPL ); //三線模式 | CKPL
U0BR0 = 0x08;
U0BR1 = 0x00; //8
U0MCTL = 0X00; //SPI模式下U0MCTL設為0
ME1 |= USPIE0; //允許SPI1模塊
U0CTL &= ~SWRST;
}
/* 延時函數 延時單位 us */
void delay(u32_t delaytime)
{
u32_t n;
for(n=0;n<delaytime;n++);
}
/* PORT2 中斷 CAN*/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2_Event(void)
{
unsigned char Flag = 0;
if( stateMachine== IDLE) // 避免各個狀態機之間出現時序沖突
{
P2IE = 0x00;
if(P2IFG & BIT7)
{
MCP2515_ReadSeqReg(RXB0D0,StoreData,6); //要讀取是何種中斷,并進行處理如讀取數據等。
MCP2515_WriteReg(CANINTF, 0x00); //清所有中斷標志
Flag = MCP2515_ReadReg(CANINTF);
while(Flag)
{
MCP2515_WriteReg(CANINTF, 0x00);
Flag = MCP2515_ReadReg(CANINTF);
}
}
stateMachine = IDLE; //應該發送旋鈕值
}
P2IFG = 0x00;
P2IE |= 0x80;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -