新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 自學(xué)Cortex-M3(1):GPIO實(shí)驗(yàn)1

自學(xué)Cortex-M3(1):GPIO實(shí)驗(yàn)1

作者: 時(shí)間:2012-07-04 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://2s4d.com/article/148808.htm

  void DelayMs (unsigned long tick)

  {

  unsigned long systickcnt;

  systickcnt = SysTickCnt;

  while ((SysTickCnt - systickcnt) tick);

  }

  /********************************************************************************

  * 函數(shù)名稱:void PortInit(void)

  * 函數(shù)功能: 端口初始化

  * 入口參數(shù): 無

  * 出口參數(shù): 無

  * 備 注:無

  *******************************************************************************/

  void PortInit(void)

  {

  1->FIODIR = 0xB0000000; /* LEDs on PORT1 defined as Output */

  2->FIODIR = 0x0000007C; /* LEDs on PORT2 defined as Output */

  Led1Off(); /* 初始化時(shí)熄滅所有的燈*/

  Led2Off();

  Led3Off();

  Led4Off();

  Led5Off();

  Led6Off();

  Led7Off();

  Led8Off();

  }

  /********************************************************************************

  * 函數(shù)名稱:int main(void)

  * 函數(shù)功能: 主函數(shù)

  * 入口參數(shù): 無

  * 出口參數(shù): 無

  * 備 注:無

  *******************************************************************************/

  int main(void)

  {

  SystemInit(); /* 系統(tǒng)初始化,函數(shù)在system_LPC17xx.c文件夾中定義*/

  SysTick_Config(SystemFrequency/1000 - 1); /* 配置時(shí)鐘中斷,每1ms中斷一次*/

  /* 在core_cm3.h中定義*/

  PortInit(); /* 端口初始化*/

  while(1)

  {

  Led1On(); //LED1開

  Led4On(); //LED4 開

  DelayMs(200);

  Led1Off(); //LED1關(guān)

  Led4Off(); //LED4關(guān)

  DelayMs(200);

  }

  }

  因?yàn)槌绦蚴亲罨A(chǔ)的,所以不是太難,程序中延時(shí)函數(shù)用的是系統(tǒng)節(jié)拍定時(shí)器,每1m中斷一次,系統(tǒng)節(jié)拍定時(shí)器的中斷配置函數(shù)是SysTick_Config(uint32_t ticks)它在core_cm3.h中有定義,有興趣的話可以看看。是一個(gè)結(jié)構(gòu)體指針,原型在LPC17XX.H這個(gè)頭文件中,其定義的原型如下所示:

  typedef struct

  {

  __IO uint32_t FIODIR;

  uint32_t RESERVED0[3];

  __IO uint32_t FIOMASK;

  __IO uint32_t FIOPIN;

  __IO uint32_t FIOSET;

  __O uint32_t FIOCLR;

  } GPIO_TypeDef;

  還有幾個(gè)宏定義,如下所示:

  1)、#define GPIO1 (( GPIO_TypeDef *) GPIO1_BASE)

  上面這個(gè)宏是把GPIO1指向芯片GPIO1的基址上,

  2)、#define GPIO1_BASE (GPIO_BASE + 0x00020)

  3)、#define GPIO_BASE (0x2009C000UL)

  這三個(gè)宏就把GPIO的基址定義了出來,關(guān)于LPV1768內(nèi)部地址的分配情況,可以參看它的數(shù)據(jù)手冊(cè),也可參考一下《ARM 權(quán)威指南》,這本書在網(wǎng)上有電子書,好像宋巖寧牛人早已把它翻譯成中文了,懶貓現(xiàn)在也正在參考這本書,另外一定要多去NXP網(wǎng)站看一下它的handbook,whitepaper等資料,還可多到論壇轉(zhuǎn)轉(zhuǎn),有些壇子里深藏了好多老鳥,好多大蝦,好多大牛,有你學(xué)的,有你問的,只要肯用心,一根網(wǎng)線,能解決很多問題。


上一頁 1 2 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉