亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bsp.c

?? ARM7(LPC2131) + FreeRTOS, 基于 Codesourcery gcc, 共10個任務, 僅占 2k RAM
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*==================================================================================================
* 板級支持包,主要為驅動程序
*==================================================================================================
*/

#include "..\bsp\lpc213_4x.h"
#include "..\bsp\bsp.h"
#include "..\bsp\i2c.h"
#include "..\rtos\source\FreeRTOS.h"
#include "..\rtos\source\task.h"

/*{{{PART_1, SYS相關*/

/*
*--------------------------------------------------------------------------------------------------
* BSP initialization
*--------------------------------------------------------------------------------------------------
*/
void  BSP_Init (void)
{
	SYS_Init();
	VIC_Init();
	GPIO_Init();
	UART_Init();
	SPI_Init();
	I2C_Init();
	//TMR1_Init();
	ADC_Init();
}

/*
*--------------------------------------------------------------------------------------------------
* System control module init (MEMMAP & PLL & VPB & PCON & MAM)
*--------------------------------------------------------------------------------------------------
*/
void  SYS_Init (void)
{
	PLLCFG  = 0x22;                            // a. 0 01 00010, P=2, M=3 (see bsp.h)
	PLLCON  = 0x01;                            // b. enable PLL
	PLLFEED = 0xAA; PLLFEED = 0x55;            // c. feed sequence
	while (!(PLLSTAT & (1<<10))) ;             // d. waiting for PLL lock freq
	PLLCON  = 0x03;                            // e. connect PLL
	PLLFEED = 0xAA; PLLFEED = 0x55;            // f. feed sequence

	VPBDIV  = 0x00;                            // (0,2,1)-->Fpclk=(1,2,4)*(Fcclk/4)=15M

	MAMCR  = 0x00;                             // Close MAM
	MAMTIM = 0x03;                             // if Fcclk>40MHz, MAMTIM=3
	MAMCR  = 0x02;                             // Full open MAM

	MEMMAP = 0x01;                             // User Flash Mode
}

/*
*--------------------------------------------------------------------------------------------------
*--------------------------------------------------------------------------------------------------
*/
void VIC_Init(void)
{
	VICIntSelect  = 0xFFFFFFFF;

	VICIntSelect &= ~(1<<6);                         //串口0中斷通道設為IRQ
	VICIntEnable |= (1<<6);                          //使能串口0中斷
	VICVectCntl2  = 0x26;	                         //串口0中斷分配到向量控制器1
	VICVectAddr2  = (unsigned long)UART0_ISR;        //設置中斷服務程序地址

	//CIntSelect &= ~(1<<7);                         //串口1中斷通道設為IRQ
	//CIntEnable |= (1<<7);                          //使能串口1中斷
	//CVectCntl3  = 0x27;                            //串口1中斷分配到向量控制器2
	//CVectAddr3  = (unsigned long)UART1_ISR;        //設置中斷服務程序地址

	VICIntSelect &= ~(1<<9);                         //I20C中斷通道設為IRQ
	VICIntEnable |= (1<<9);                          //使能I20C中斷
	VICVectCntl4  = 0x29;                            //I20C中斷分配到向量控制器4
	VICVectAddr4  = (unsigned long)I2C_ISR;          //設置中斷服務程序地址
}

/*
*-------------------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------------------
*/
void GPIO_Init(void)
{
	PINSEL2 |= (1<<2);                               // P1[36:26] 接 Jtag
	PINSEL0  = 0x00;                                 // 置為GPIO
	PINSEL1  = 0x00;                                 // 置為GPIO
	PINSEL2 &= ~(1<<3);                              // P1[25:16] 接 GPIO
	IODIR1  |= DS2MASK;                              // P1.24出至DS2
	IODIR0  |= DS3MASK|BELLMASK;                     // P0.25出至DS3, P0.8出至BEEP
	IODIR0  |= keyscan1|keyscan2|keyscan3|keyscan4;
	TurnOffDS2();
	TurnOffDS3();
	TurnOffBELL();
}

/*
*--------------------------------------------------------------------------------------------------
* 掃描 4X4 按鍵,另需在任務中加去抖,例如延時 50ms 等等
*--------------------------------------------------------------------------------------------------
*/
const unsigned long keyscan[4]={keyscan1,keyscan2,keyscan3,keyscan4};
unsigned long key_scan(void)
{

	unsigned long k=0;
	static unsigned long ksp=0;
	IOSET0 = keyscan1|keyscan2|keyscan3|keyscan4;    // 設置掃描輸出腳為高電平
	IOCLR0 = keyscan[ksp];                           // 輪流使掃描線變低電平
	for (k=200; k; k--) {                            // 等待IO口穩定
		; ;
	}
	k = IOPIN0&(keyin1|keyin2|keyin3|keyin4);        // 讀取keyin IO口
	k |= 0x80000000;                                 // 判斷是否有按鍵按下
	if (k!=keyin1+keyin2+keyin3+keyin4+0x80000000) {
		if      ((k&keyin1)==0) k=0;
		else if ((k&keyin2)==0) k=4;
		else if ((k&keyin3)==0) k=8;
		else if ((k&keyin4)==0) k=12;
		else                    k=17;
	}
	k += ksp;
	ksp ++;
	if (ksp==4) ksp = 0;
	return (k);
}

/*}}}PART_1*/
/*{{{PART_2, TMR相關*/

/*
*--------------------------------------------------------------------------------------------------
* TICKER initialization, 已由 port.c 和 portISR.c 中的相關處理代替
*--------------------------------------------------------------------------------------------------
*/
/*void  TMR0_Init (void)
{
	VICIntSelect &= ~(1 << VIC_TIMER0);        // Enable interrupts
	VICVectAddr1  = (unsigned long)TMR0_ISR;   // Set the vector address
	VICVectCntl1  = 0x20 | VIC_TIMER0;         // Enable vectored interrupts
	VICIntEnable  =  (1 << VIC_TIMER0);        // Enable Interrupts

	T0TCR         = 0;                         // Disable timer 0.
	T0PC          = 0;                         // Prescaler is set to no division.
	T0MR0         = Fpclk / OSTicksPerSec;     // Count up to this value.
	T0MCR         = 3;                         // Reset and interrupt on MR0 (match register 0).
	T0CCR         = 0;                         // Capture is disabled.
	T0EMR         = 0;                         // No external match output.
	T0TCR         = 1;                         // Enable timer 0
}*/

/*
*--------------------------------------------------------------------------------------------------
* TIMER1 initialization
*--------------------------------------------------------------------------------------------------
*/
/*void TMR1_Init(void)
{
	T1TCR = 0;                                 // Timer0 Enable
	T1MR0 = Fpclk/OSTicksPerSec-1;             // Compare-hit at 10mSec (-1 reset "tick")
	T1MCR = 3; 	                           // Interrupt and Reset on MR0
	T1TCR = 1;                                 // Timer0 Enable

	VICVectAddr5 = (unsigned long)TMR1_ISR;    // set interrupt vector in 0
	VICVectCntl5 = (1<<5) | 5;                 // use it for Timer 0 Interrupt:
	VICIntEnable = (1<<5);                     // Enable Timer0 Interrupt
}*/

/*
*--------------------------------------------------------------------------------------------------
* TIMER1 IRQ HANDLER
*--------------------------------------------------------------------------------------------------
*/
/*void __attribute__ ((interrupt("IRQ"))) TMR1_ISR(void)
{
	//timeval++;
	T1IR = 1<<0;           // Clear interrupt flag by writing 1 to Bit 0
	VICVectAddr = 0;       // Acknowledge Interrupt (rough?)
}*/

/*
*--------------------------------------------------------------------------------------------------
* 精確延時
*--------------------------------------------------------------------------------------------------
*/
/*static void delay(unsigned long delay)
{
	unsigned long i;

	i = timeval + delay;
	while ( i != timeval);
}*/

/*
*--------------------------------------------------------------------------------------------------
* 簡單延時
*--------------------------------------------------------------------------------------------------
*/
void delay2(unsigned long dly)
{
	unsigned long i, j;
	for (; dly>0; dly--) {
		for (i=0; i<5000000; i++) {
			j++;
		}
	}
}

/*}}}PART_2*/
/*{{{PART_3, UART相關*/

volatile unsigned char UART0RBUF[14];

/*
*--------------------------------------------------------------------------------------------------
*--------------------------------------------------------------------------------------------------
*/
void UART_Init(void)
{
	unsigned short div_latch_val;

	PINSEL0 = (PINSEL0&0xFFFFFFF0)|0x5;            //配置P0.0為TxD0, P0.1為RxD0
	U0LCR = 0x80;                                  //允許改波特率(DLAB=1)
	div_latch_val = (Fpclk/16)/9600;               //波特率=9600bps
	U0DLM = div_latch_val >> 8;
	U0DLL = div_latch_val & 0x00FF;
	U0LCR = 0x03;                                  //設為 8-1-N, (DLAB=0)
	U0FCR = 0xC7;                                  //使能 FIFO, 長度為 14
	U0IER = 0x01;                                  //使能 RDA 中斷, 關閉 THRE 中斷

	/*NSEL0 = (PINSEL0&0xFFF0FFFF)|0x50000;	       //配置P0.8為TxD1, P0.9為RxD1
	U1LCR = 0x80;				       //允許改波特率(DLAB=1)
	div_latch_val = (Fpclk/16)/9600;	       //波特率=9600bps
	U1DLM = div_latch_val >> 8;
	U1DLL = div_latch_val & 0x00FF;
	U1LCR = 0x03;				       //設為 8-1-N, (DLAB=0)
	U1FCR = 0x87;				       //使能 FIFO, 長度為 8
	U1IER = 0x01;				       //使能 RDA 中斷, 關閉 THRE 中斷
	*/
}

/*
*--------------------------------------------------------------------------------------------------
* UART0 通信前臺: 收取數據
*--------------------------------------------------------------------------------------------------
*/
void UART0_ISR(void) __attribute__ ((interrupt("IRQ")));
void UART0_ISR(void)
{
	unsigned int i;
	switch (U0IIR&0x0F) {
		case 0x04:			//收滿14節
			for (i=0; i<14; i++) {
				UART0RBUF[i] = U0RBR;
			}
			msg_uart0_rcv_data ++;
			break;
		case 0x0C:			//未滿14節而超時
			for (i=0; i<13; i++) {
				if (!(U0LSR&0x01)) break;
				UART0RBUF[i] = U0RBR;
			}
			msg_uart0_rcv_data ++;
			break;
		default: break;
	}
	VICVectAddr = 0;
}

/*
*--------------------------------------------------------------------------------------------------
* UART1 通信前臺: 收取數據
*--------------------------------------------------------------------------------------------------
*/
/*id UART1_ISR(void) __attribute__ ((interrupt("IRQ")));
void UART1_ISR(void)
{
	unsigned char i, tmp;
	switch (U1IIR&0x0F) {
		case 0x04:			//收滿8節
			for (i=0; i<8; i++) {
				tmp = U1RBR;
				//SaveToMetRbuf(tmp);
			}
			break;
		case 0x0C:			//未滿8節而超時
			for (i=0; i<8; i++) {
				if (!(U1LSR&0x01)) break;
				else {
					tmp = U1RBR;
					//SaveToMetRbuf(tmp);
				}
			}
			break;
		default: break;
	}
	VICVectAddr = 0;
}*/

/*
*--------------------------------------------------------------------------------------------------
*  串口0發送一節
*--------------------------------------------------------------------------------------------------
*/
/*void UART0_putchar(unsigned char byte)
{
	U0THR = byte;
	while ((U0LSR&0x20)==0) ;
}*/

/*
*--------------------------------------------------------------------------------------------------
*  串口1發送一節
*--------------------------------------------------------------------------------------------------
*/
/*void UART1_putchar(unsigned char byte)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品91自产拍在线观看一区| 玉足女爽爽91| 韩国欧美国产1区| 欧美一区二区黄色| 蜜桃一区二区三区四区| 日韩一级完整毛片| 国产在线不卡一区| 久久久久国产免费免费| 成人黄色免费短视频| 国产精品美女视频| 欧美在线观看一区二区| 五月婷婷久久丁香| 精品日韩一区二区三区| 成人一区二区在线观看| 亚洲精品国产品国语在线app| 欧美中文字幕一二三区视频| 色综合久久天天综合网| 亚洲欧美另类小说| 26uuu另类欧美| 一本久道久久综合中文字幕| 蜜臀久久久99精品久久久久久| 久久新电视剧免费观看| 欧美在线视频不卡| 国产原创一区二区三区| 亚洲精品国产a| 久久先锋影音av| 欧美主播一区二区三区| 99视频一区二区| 国产电影精品久久禁18| 亚洲国产精品欧美一二99| 中文字幕 久热精品 视频在线| 欧美一区二区网站| 欧美色综合天天久久综合精品| 从欧美一区二区三区| 国产在线精品视频| 久久精品国产亚洲高清剧情介绍| 亚洲成人黄色小说| 亚洲综合精品自拍| 亚洲少妇屁股交4| 国产精品乱码一区二区三区软件 | 视频一区二区欧美| 亚洲综合av网| 亚洲综合在线五月| 亚洲另类在线一区| 亚洲视频资源在线| 一色屋精品亚洲香蕉网站| 国产亚洲美州欧州综合国| 精品久久久久一区| 欧美刺激脚交jootjob| 精品捆绑美女sm三区| 日本一区二区三区四区在线视频 | 在线不卡欧美精品一区二区三区| 欧洲日韩一区二区三区| 91黄视频在线观看| 欧美精品免费视频| 精品国产免费人成电影在线观看四季| 日韩精品中文字幕在线不卡尤物| 日韩欧美国产精品| 国产性色一区二区| 亚洲日本一区二区三区| 亚洲成人在线免费| 国产真实乱子伦精品视频| 风间由美一区二区三区在线观看 | 欧美日韩国产免费一区二区| 欧美精品久久99久久在免费线| 91精品国产欧美日韩| 国产精品嫩草影院com| 亚洲高清在线精品| 国产成人免费网站| av在线播放不卡| 日韩视频中午一区| 亚洲综合无码一区二区| 国产凹凸在线观看一区二区| 欧美性生活一区| 国产女同互慰高潮91漫画| 午夜精品在线看| 成人精品视频一区二区三区尤物| 欧美日韩亚洲丝袜制服| 国产精品免费人成网站| 日韩激情一区二区| 色一情一伦一子一伦一区| 国产色产综合产在线视频| 久久国产尿小便嘘嘘尿| 91超碰这里只有精品国产| 亚洲伦理在线免费看| 成人综合婷婷国产精品久久免费| 精品久久久久久最新网址| 日韩av电影免费观看高清完整版在线观看| 成人免费电影视频| 国产精品久久毛片av大全日韩| 国产成人精品免费看| 久久女同精品一区二区| 精品亚洲国产成人av制服丝袜| 在线不卡a资源高清| 日本欧美韩国一区三区| 欧美一级国产精品| 蜜臀久久99精品久久久画质超高清| 欧美日韩成人一区| 奇米亚洲午夜久久精品| 日韩欧美的一区| 国产剧情一区二区三区| 日本一区二区电影| 色综合天天视频在线观看| 亚洲电影激情视频网站| 欧美成人三级电影在线| 国产成人a级片| 亚洲欧美激情小说另类| 日韩美一区二区三区| 成人黄色av电影| 日韩福利视频导航| 久久久不卡网国产精品二区| 91视视频在线观看入口直接观看www| 偷拍与自拍一区| 亚洲国产精品高清| 8v天堂国产在线一区二区| 丁香啪啪综合成人亚洲小说| 午夜久久久久久久久| 国产精品入口麻豆原神| 欧美精品在欧美一区二区少妇| 国产九九视频一区二区三区| 亚洲高清视频中文字幕| 中文字幕第一区二区| 7777精品伊人久久久大香线蕉完整版 | 成人黄色电影在线| 老司机免费视频一区二区| 亚洲美腿欧美偷拍| 国产日韩欧美一区二区三区乱码| 欧美日韩电影一区| 欧美无人高清视频在线观看| 91欧美一区二区| 国产成人在线看| 久久av老司机精品网站导航| 樱桃视频在线观看一区| 国产色婷婷亚洲99精品小说| 欧美精品一级二级| 欧美三级乱人伦电影| 欧美日韩综合色| 在线观看日韩av先锋影音电影院| 不卡av在线网| 99视频精品免费视频| 成人手机在线视频| 成人免费视频国产在线观看| 国产成人av电影在线| 国产不卡一区视频| 国产69精品一区二区亚洲孕妇| 国产一区二区免费看| 国产99久久久国产精品潘金网站| 福利一区二区在线| 91高清视频在线| 欧美二区在线观看| 久久色在线视频| 中文字幕制服丝袜成人av | 91精品国产综合久久精品| 欧美在线色视频| 精品久久久久久久久久久久久久久| 精品国产一区二区亚洲人成毛片| 337p日本欧洲亚洲大胆色噜噜| 欧美经典一区二区| 一区二区在线观看视频在线观看| 亚洲国产成人av网| 国产福利不卡视频| 91欧美激情一区二区三区成人| 欧美日本在线一区| 国产欧美综合在线| 性感美女久久精品| 成人国产精品免费观看视频| 91国在线观看| 久久午夜羞羞影院免费观看| 亚洲一区二区精品3399| 久久国产精品无码网站| 一本色道久久综合精品竹菊| 日韩午夜激情视频| 一区二区三区在线影院| 国产九九视频一区二区三区| 欧美日韩激情一区二区| 中文字幕精品—区二区四季| 美女视频网站久久| 在线精品观看国产| 亚洲日本在线天堂| 国产成人精品一区二区三区四区 | 尤物视频一区二区| 国产夫妻精品视频| 欧美成人精品1314www| 亚洲成人精品在线观看| 色成年激情久久综合| 中文字幕精品综合| 国产91丝袜在线播放0| 久久色在线视频| 国产凹凸在线观看一区二区| 欧美mv和日韩mv的网站| 蜜臀av国产精品久久久久| 欧美一区午夜视频在线观看| 日韩经典一区二区| 欧美一区二区不卡视频| 日韩av一区二区三区四区| 欧美成人一级视频| 成人在线视频一区二区| 一色屋精品亚洲香蕉网站| 92精品国产成人观看免费| 亚洲欧美日韩久久精品|