亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美疯狂性受xxxxx喷水图片| 日韩在线播放一区二区| 成人av先锋影音| 国产精品护士白丝一区av| 成人久久18免费网站麻豆 | 成人激情av网| 亚洲老司机在线| 欧美精选午夜久久久乱码6080| 日韩极品在线观看| 精品国内片67194| 成人免费视频一区二区| 亚洲欧美一区二区三区极速播放| 日韩欧美视频在线| 久久久午夜精品理论片中文字幕| 国产成人在线免费观看| 亚洲欧洲综合另类在线| 欧美麻豆精品久久久久久| 久久99国内精品| 国产精品久久久久久久久久免费看| 色一区在线观看| 日本怡春院一区二区| 欧美高清在线精品一区| 欧美午夜理伦三级在线观看| 奇米精品一区二区三区四区| 久久久久久久久久久久久女国产乱| 99re热视频这里只精品| 日韩国产欧美在线播放| 国产视频一区在线观看| 欧美视频在线不卡| 成人午夜电影久久影院| 男女性色大片免费观看一区二区 | 麻豆精品在线播放| 国产精品白丝在线| 欧美一级理论片| 91欧美一区二区| 久久99久久99| 亚洲色图一区二区三区| 99精品久久只有精品| 欧美日本韩国一区二区三区视频| 久久免费美女视频| 性做久久久久久久免费看| 国产风韵犹存在线视精品| 欧美另类久久久品| 一区二区三区四区亚洲| 成人动漫视频在线| 久久精品水蜜桃av综合天堂| 日韩电影在线一区二区| 欧美高清性hdvideosex| 亚洲成人午夜电影| 欧美日韩高清一区二区不卡| 亚洲精品美国一| 成人ar影院免费观看视频| 国产校园另类小说区| 成av人片一区二区| 欧美人伦禁忌dvd放荡欲情| 欧美手机在线视频| 国产精品另类一区| 亚洲精选在线视频| 不卡的av在线播放| 亚洲精品第一国产综合野| 国产精品国产自产拍在线| 综合激情成人伊人| 成人av在线影院| 寂寞少妇一区二区三区| 亚洲国产成人tv| 亚洲欧美日韩精品久久久久| 国产亚洲成aⅴ人片在线观看 | 久久久久国产免费免费| 日韩免费电影网站| 制服.丝袜.亚洲.中文.综合| 日本韩国视频一区二区| 99国产一区二区三精品乱码| 成人高清视频在线| 成人午夜免费av| 成人毛片在线观看| 成人精品免费看| 成人一级片在线观看| 国产精品99久久久久久有的能看 | 欧美美女激情18p| 欧美日韩高清一区二区不卡| 欧美日韩激情一区| 欧美精品丝袜久久久中文字幕| 欧美日韩一区二区在线观看| 欧美日韩午夜影院| 欧美日韩美少妇| 欧美人伦禁忌dvd放荡欲情| 欧美日本视频在线| 欧美r级电影在线观看| 久久新电视剧免费观看| 国产无遮挡一区二区三区毛片日本| 久久久精品欧美丰满| 国产欧美日产一区| 亚洲乱码中文字幕| 亚洲成人在线网站| 美女网站一区二区| 激情文学综合网| 成人av电影在线播放| 在线亚洲高清视频| 日韩欧美在线不卡| 中文字幕的久久| 亚洲蜜臀av乱码久久精品| 亚洲国产视频一区| 韩国精品在线观看| 91视视频在线观看入口直接观看www| 94色蜜桃网一区二区三区| 99精品欧美一区二区蜜桃免费 | 国产精品热久久久久夜色精品三区| 国产精品久久久久久久午夜片| 一区二区三区高清在线| 日韩av一级电影| 处破女av一区二区| 欧美军同video69gay| 精品少妇一区二区三区日产乱码| 欧美国产97人人爽人人喊| 亚洲欧美另类久久久精品2019| 日韩高清欧美激情| 成人免费精品视频| 欧美日韩国产系列| 国产精品久久久久久久久免费桃花| 亚洲国产日产av| 福利一区二区在线| 欧美一区日本一区韩国一区| 国产午夜亚洲精品不卡| 五月综合激情婷婷六月色窝| 国产黄人亚洲片| 欧美肥妇bbw| 亚洲色图欧洲色图婷婷| 麻豆91免费观看| 欧洲亚洲国产日韩| 国产亚洲成aⅴ人片在线观看| 婷婷综合五月天| 91日韩一区二区三区| 久久久久高清精品| 麻豆精品久久久| 欧美日韩一区二区三区不卡| 国产精品免费人成网站| 蜜桃av一区二区三区电影| 99久久久精品免费观看国产蜜| 欧美成人精品福利| 午夜精品123| 欧美综合亚洲图片综合区| 国产精品午夜在线观看| 精品一二三四区| 91精品婷婷国产综合久久 | 欧美日韩一区二区在线观看视频| 日日嗨av一区二区三区四区| 91免费观看在线| 久久精品人人爽人人爽| 青青草成人在线观看| 欧美主播一区二区三区| 国产精品成人免费精品自在线观看| 久久精品国产在热久久| 7777精品伊人久久久大香线蕉经典版下载 | 国产成人亚洲综合a∨婷婷 | 国产一区二区看久久| 欧美一区二区三区啪啪| 午夜亚洲福利老司机| 在线观看视频欧美| 亚洲视频精选在线| 99视频一区二区| 国产精品久久国产精麻豆99网站| 国产九九视频一区二区三区| 日韩精品中文字幕一区| 日本伊人午夜精品| 日韩欧美色综合| 激情五月激情综合网| 久久久三级国产网站| 国产精品亚洲第一区在线暖暖韩国| 欧美一级二级三级蜜桃| 麻豆精品久久精品色综合| 欧美成人一级视频| 国产精品影视天天线| 国产精品视频麻豆| 99国产精品国产精品久久| 亚洲乱码中文字幕综合| 欧美视频在线播放| 日韩影院在线观看| 欧美成人a在线| 成人永久免费视频| 亚洲日本电影在线| 欧美精品高清视频| 国内精品视频一区二区三区八戒| 久久久精品tv| 91蜜桃在线观看| 日韩精品一级中文字幕精品视频免费观看 | 日韩三级伦理片妻子的秘密按摩| 男女性色大片免费观看一区二区 | 亚洲第一av色| 日韩免费性生活视频播放| 国产一区二区三区高清播放| 国产片一区二区三区| 91色在线porny| 日韩精品亚洲一区二区三区免费| 日韩欧美资源站| 成人av网站在线| 天堂在线亚洲视频| 久久精品欧美一区二区三区麻豆| 91色在线porny| 久久99九九99精品| 中文字幕一区二区在线播放|