|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
初次編ARM程序,請大蝦指教 |
| 作者:melearn 欄目:ARM技術(shù) |
此程序要實現(xiàn)的功能是從上位機(jī)接收數(shù)據(jù)后,按KEY1鍵后數(shù)碼管顯示高4位,同時LED1亮,按KEY2鍵后數(shù)碼管顯示第四位,同時LED1滅,我用的是EasyARM2100開發(fā)板,現(xiàn)在按鍵LED1會亮和滅,但數(shù)碼管死活不顯示,現(xiàn)將原程序附于下,請大蝦指教其中的錯誤,菜鳥不甚感激啊。。。 /******************************************************************** * 文件名:DATARET.C * 功能:使用串口UART0接收上位機(jī)發(fā)送的數(shù)據(jù),當(dāng)接收到8個連續(xù)數(shù)據(jù)后,將接收計數(shù)值加一后輸 * 出數(shù)碼管D1顯示,并將數(shù)據(jù)原封不動地發(fā)送回上位機(jī)。 * 說明:將跳線器JP5、JP3短接。 * 通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗。 ****************************************************************************/ #include "config.h" #define SPI_CS (1<<29) /* P0.29 */ #define SPI_DATA (1<<6) /* P0.6 */ #define SPI_CLK (1<<4) /* P0.4 */ #define SPI_IOCON (SPI_CS|SPI_DATA|SPI_CLK) /* 定義SPI接口的I/O設(shè)置字 */ #define KEY1 (1<<16) #define KEY2 (1<<17) #define LEDCON1 1<<22 /* 定義串口模式設(shè)置數(shù)據(jù)結(jié)構(gòu) */ typedef struct UartMode { uint8 datab; // 字長度,5/6/7/8 uint8 stopb; // 停止位,1/2 uint8 parity; // 奇偶校驗位,0為無校驗,1奇數(shù)校驗,2為偶數(shù)校驗 } UARTMODE; uint8 rcv_buf[8]; // UART0數(shù)據(jù)接收緩沖區(qū) uint8 rcv_new; // 接收新數(shù)據(jù)標(biāo)志 ////////////////////////////// int WAITKEY1() { uint32 i; while(1) { while((IO0PIN&KEY1)!=0); for(i=0;i<50000;i++); if((IO0PIN&KEY1)==0); break; } while((IO0PIN&KEY1)==0); return(1); } //////////////////////////////// int WAITKEY2() { uint32 i; while(1) { while((IO0PIN&KEY2)!=0); for(i=0;i<50000;i++); if((IO0PIN&KEY2)==0); break; } while((IO0PIN&KEY2)==0); return(1); } ////////////////////////////////////// /**************************************************************************** * 名稱:IRQ_UART0() * 功能:串口UART0接收中斷。 * 入口參數(shù):無 * 出口參數(shù):無 ****************************************************************************/ void __irq IRQ_UART0(void) { uint8 i; if( 0x04==(U0IIR&0x0F) ) rcv_new = 1;// 設(shè)置接收到新的數(shù)據(jù)標(biāo)志 for(i=0; i<8; i++) { rcv_buf[i] = U0RBR; // 讀取FIFO的數(shù)據(jù),并清除中斷標(biāo)志 } VICVectAddr = 0x00; // 中斷處理結(jié)束 } /**************************************************************************** * 名稱:UART0_Ini() * 功能:初始化串口0。設(shè)置其工作模式及波特率。 * 入口參數(shù):baud 波特率 * set 模式設(shè)置(UARTMODE數(shù)據(jù)結(jié)構(gòu)) * 出口參數(shù):返回值為1時表示初始化成功,為0表示參數(shù)出錯 ****************************************************************************/ uint8 UART0_Ini(uint32 baud, UARTMODE set) { uint32 bak; /* 參數(shù)過濾 */ if( (0==baud)||(baud>115200) ) return(0); if( (set.datab<5)||(set.datab>8) ) return(0); if( (0==set.stopb)||(set.stopb>2) ) return(0); if( set.parity>4 ) return(0); /* 設(shè)置串口波特率 */ U0LCR = 0x80; // DLAB位置1 bak = (Fpclk>>4)/baud; U0DLM = bak>>8; U0DLL = bak&0xff; /* 設(shè)置串口模式 */ bak = set.datab-5; // 設(shè)置字長度 if(2==set.stopb) bak |= 0x04; // 判斷是否為2位停止位 if(0!=set.parity) {set.parity = set.parity-1; bak |= 0x08;} bak |= set.parity<<4; // 設(shè)置奇偶校驗 U0LCR = bak; return(1); } /**************************************************************************** * 名稱:HC595_SendDat() * 功能:向74HC595發(fā)送一字節(jié)數(shù)據(jù) * 入口參數(shù):dat 要發(fā)送的數(shù)據(jù) * 出口參數(shù):無 * 說明:發(fā)送數(shù)據(jù)時,高位先發(fā)送。 ****************************************************************************/ ///////////////////////////////////////////// void MSPI_Init(void) { PINSEL0 = (PINSEL0&0xFFFF00FF)|0x00005500; S0PCCR = 0x52; S0PCR = (0<<3)|(1<<4)|(1<<5)|(0<<6)|(0<<7); } ////////////////////////////////////////////// void HC595_SendDat(uint8 dat) { uint8 i; IO0CLR = SPI_CS; // SPI_CS = 0 for(i=0; i<8; i++) // 發(fā)送8位數(shù)據(jù) { IO0CLR = SPI_CLK; // SPI_CLK = 0 /* 設(shè)置SPI_DATA輸出值 */ if( (dat&0x80)!=0 ) IO0SET = SPI_DATA; else IO0CLR = SPI_DATA; dat <<= 1; IO0SET = SPI_CLK; &nbs |
| 2樓: | >>參與討論 |
| 作者: melearn 于 2006/2/14 13:57:00 發(fā)布:
怎么沒有大蝦指教嗎,版主大人們都在休息嗎 |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |