色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

LPC800前生今世-第八章 引腳中斷和引腳組合邏輯 (Pin Interrupt & Pin Pattern)

恩智浦MCU加油站 ? 來(lái)源:恩智浦MCU加油站 ? 作者:恩智浦MCU加油站 ? 2023-12-14 16:20 ? 次閱讀

外部引腳可以觸發(fā)芯片內(nèi)部的中斷,這是每一個(gè)通用MCU都具備的基本功能。

LPC800中,所有外部引腳都可以配置為產(chǎn)生中斷的觸發(fā)源。每個(gè)引腳不但可以獨(dú)立地觸發(fā)中斷,還可以和其它引腳的信號(hào)狀態(tài)進(jìn)行組合,由軟件指定某種特定的組合觸發(fā)中斷。

前面幾章已經(jīng)介紹了引腳的特性配置由IOCON模塊實(shí)現(xiàn),開(kāi)關(guān)矩陣則負(fù)責(zé)把引腳與片內(nèi)外設(shè)對(duì)應(yīng)起來(lái)。所有的數(shù)字信號(hào),不管配置為輸入還是輸出,都可以被指定為引腳中斷和引腳組合邏輯的一個(gè)輸入選項(xiàng)。本章只介紹引腳中斷和引腳組合邏輯模塊,其它部分請(qǐng)參看對(duì)應(yīng)章節(jié)。

下圖給出了引腳中斷和引腳組合邏輯模塊(圖中藍(lán)色部分)與其它部分的關(guān)系示意。

wKgZomV6u-iAa3NUAADr1FWPyRY865.png圖1.引腳中斷和引腳組合邏輯模塊與開(kāi)關(guān)矩陣(SWM)和引腳配置模塊(IOCON)的關(guān)系示意圖

1.1.引腳中斷功能和使用任何引腳,只要它在開(kāi)關(guān)矩陣或IOCON中被指定為數(shù)字引腳,不管是輸入還是輸出,這個(gè)引腳都可以被指定為引腳中斷和引腳組合邏輯的輸入端。

所有的LPC800產(chǎn)品,都允許有最多8個(gè)引腳作為引腳中斷和引腳組合邏輯的輸入端。在SYSCON中通過(guò)8個(gè)PINTSEL寄存器,指定哪個(gè)引腳可以作為引腳中斷的輸入,軟件只需把引腳編號(hào)寫入對(duì)應(yīng)的PINTSEL寄存器即可。對(duì)于PIO1_n的引腳,引腳編號(hào)為(32 + n)。

例如:
      LPC_SYSCON->PINTSEL[0] = 20// 指定PIO0_20為引腳中斷0的輸入源
      LPC_SYSCON->PINTSEL[3] = 20// 指定PIO0_20為引腳中斷3的輸入源
      LPC_SYSCON->PINTSEL[6] = 33;// 指定PIO1_1為引腳中斷6的輸入源

1.1.1 指定中斷觸發(fā)源和觸發(fā)方式

在LPC800中有8個(gè)引腳中斷向量,它們分別為PININT0_IRQ ~ PININT7_IRQ,每個(gè)PINTSEL寄存器指定的引腳對(duì)應(yīng)一個(gè)中斷向量。以下10個(gè)寄存器用于控制中斷觸發(fā)源和觸發(fā)方式:wKgZomV6u-iASpZ7AADBbq0cru8425.png 表1.控制中斷觸發(fā)源和觸發(fā)方式的寄存器

下面這個(gè)表格是按照要求的觸發(fā)方式,標(biāo)示出應(yīng)該如何設(shè)置寄存器控制位。

wKgZomV6u-iAMLnVAAAe0vODBJU730.png 表2.觸發(fā)方式的配置

表2中可以看出,SIENR和CIENR都是只寫寄存器,一個(gè)用于設(shè)置IENR寄存器位,另一個(gè)用于清除IENR寄存器位;這兩個(gè)寄存器的目的是為了在修改IENR寄存器時(shí)的“讀-修改-寫”的操作,只需寫操作,即可改變所有需要設(shè)置的位或需要清除的位。

同樣,SIENF和CIENF也都是只寫寄存器,用于設(shè)置IENF寄存器位。

由于獨(dú)立的IENR和IENF寄存器,用戶可以配置同一個(gè)信號(hào)的上升沿和下降沿都產(chǎn)生中斷。在中斷處理中,可以通過(guò)讀出RISE和FALL寄存器判斷是哪個(gè)邊沿產(chǎn)生的中斷。在RISE和/或FALL寄存器中寫’1’可以清除中斷狀態(tài),也可以在IST寄存器中寫’1’ 清除中斷狀態(tài)。

1.1.2 電平觸發(fā)方式的使用

因?yàn)橥ㄟ^(guò)軟件本身,在MCU內(nèi)部不能清除電平觸發(fā)所產(chǎn)生的中斷,軟件必須執(zhí)行某種操作,讓外部電路改變信號(hào)線上的電平,才能使MCU不再產(chǎn)生中斷,所以使用電平中斷時(shí)要小心處理。

可以通過(guò)在IST寄存器中寫’1’的方式,改變觸發(fā)的電平,從而間接地清除中斷狀態(tài)。例如當(dāng)高電平觸發(fā)中斷后,在IST寄存器中寫’1’,控制器將變?yōu)橛械碗娖綍r(shí)產(chǎn)生中斷,同時(shí)清除中斷狀態(tài)。

一般情況下,建議用邊沿觸發(fā)方式,通過(guò)軟件處理實(shí)現(xiàn)電平中斷的效果。對(duì)于高電平中斷的控制方式,改變位在上升沿中斷的中斷處理程序返回之前,檢測(cè)該信號(hào)線是否為高電平的方式實(shí)現(xiàn)相同的邏輯功能。同理,低電平中斷的控制方式,可以用下降沿中斷,再加上檢測(cè)低電平的方式實(shí)現(xiàn)相同邏輯功能。

1.2.引腳中斷的實(shí)用函數(shù)為了方便使用,這里呈現(xiàn)幾個(gè)實(shí)用函數(shù),方便使用PINT功能。

1.2.1復(fù)位所有引腳中斷寄存器(PinInt_Reset)

PinInt_Reset()函數(shù)的功能就是清除所有未處理的引腳中斷標(biāo)志,同時(shí)關(guān)閉所有的引腳中斷。

代碼片段1.復(fù)位所有引腳中斷函數(shù)
01  void PinInt_Reset()
02  {
03      LPC_PIN_INT->ISEL = 0;      // 邊沿觸發(fā)
04      LPC_PIN_INT->IENR = 0;      // 關(guān)閉上升沿或電平中斷
05      LPC_PIN_INT->IENF = 0;      // 關(guān)閉下降沿中斷
06      LPC_PIN_INT->RISE = 0xFF;   // 清除上升沿檢測(cè)標(biāo)志
07      LPC_PIN_INT->FALL = 0xFF;   // 清除下降沿檢測(cè)標(biāo)志
08  }

1.2.2使能引腳的中斷

共有4個(gè)函數(shù)分別使能引腳的中斷為上升沿觸發(fā)、下降沿觸發(fā)、高電平觸發(fā)和低電平觸發(fā),這些函數(shù)的功能是按照給定的輸入參數(shù),使能對(duì)應(yīng)的引腳中斷,它的輸入?yún)?shù)是需要設(shè)置的引腳中斷的位域值。

輸入?yún)?shù)的第0位為’1’表示需要設(shè)置PININT0,輸入?yún)?shù)的第1位為’1’表示需要設(shè)置PININT1,依次類推直至第7位。

注意,不要把PININTn和引腳編號(hào)混淆,使用以下函數(shù)之前,需要指定PININTn和引腳的關(guān)系,由LPC_SYSCON->PINTSEL[0]定義,見(jiàn)1.1節(jié)。

下面分別是這4個(gè)函數(shù)的代碼:

代碼片段2.函數(shù)PinInt_Enable_Rising()
01  void PinInt_Enable_Rising(uint32_t pins_mask)
02  {
03      uint32_t Pint_mode;
04      Pint_mode = LPC_PIN_INT->ISEL;
05      if (Pint_mode & pins_mask) {
06          Pint_mode &= ~pins_mask;
07          LPC_PIN_INT->ISEL = Pint_mode;  // 邊沿觸發(fā)
08      }
09      LPC_PIN_INT->SIENR = pins_mask;     // 使能上升沿中斷
10  }

代碼片段3.函數(shù)PinInt_Enable_Falling()
01  void PinInt_Enable_Falling(uint32_t pins_mask)
02  {
03      uint32_t Pint_mode;
04      Pint_mode = LPC_PIN_INT->ISEL;
05      if (Pint_mode & pins_mask) {
06          Pint_mode &= ~pins_mask;
07          LPC_PIN_INT->ISEL = Pint_mode;  // 邊沿觸發(fā)
08      }
09      LPC_PIN_INT->SIENF = pins_mask;     // 使能下降沿中斷
10  }

代碼片段4.函數(shù)PinInt_Enable_High()

01  void PinInt_Enable_High(uint32_t pins_mask)
02  {
03      uint32_t Pint_mode;
04      Pint_mode = LPC_PIN_INT->ISEL;
05      if ((Pint_mode & pins_mask) != pins_mask) {
06          Pint_mode |= pins_mask; 
07          LPC_PIN_INT->ISEL = Pint_mode;  // 電平觸發(fā)
08      }
09      LPC_PIN_INT->SIENF = pins_mask;     // 使能高電平中斷
10  }

代碼片段5.函數(shù)PinInt_Enable_Low ()

01  void PinInt_Enable_Low(uint32_t pins_mask)
02  {
03      uint32_t Pint_mode;
04      Pint_mode = LPC_PIN_INT->ISEL;
05      if ((Pint_mode & pins_mask) != pins_mask) {
06          Pint_mode |= pins_mask;
07          LPC_PIN_INT->ISEL = Pint_mode;  // 電平觸發(fā)
08      }
09      LPC_PIN_INT->CIENF = pins_mask;     // 使能低電平中斷
10  }

1.2.3關(guān)閉對(duì)應(yīng)的引腳中斷(PinInt_Disable)PinInt_Disable()函數(shù)的功能是按照給定的輸入?yún)?shù),關(guān)閉對(duì)應(yīng)的引腳中斷,它的輸入?yún)?shù)和上面那些函數(shù)的輸入?yún)?shù)意義一致,是需要設(shè)置的引腳中斷的位域值。

代碼片段6.函數(shù)PinInt_ Disable ()

01  void PinInt_Disable(uint32_t pins_mask)
02  {
03      uint32_t Pin_mask;
04      for (Pin_mask = 1; Pin_mask < 0x100; Pin_mask <<= 1) {
05          if ((pins_mask & Pin_mask) == 0)
06              continue;      // 對(duì)未指定的位,不做任何操作
07          if (LPC_PIN_INT->ISEL & Pin_mask) { // 電平中斷
08              LPC_PIN_INT->CIENR = Pin_mask;  // 關(guān)閉對(duì)應(yīng)中斷
09          }
10          else {  // 邊沿觸發(fā)
11              LPC_PIN_INT->CIENR = Pin_mask;  // 關(guān)閉上升沿中斷
12              LPC_PIN_INT->CIENF = Pin_mask;  // 關(guān)閉下降沿中斷
13          }
14      }
15  }

1.2.4清除對(duì)應(yīng)的引腳中斷標(biāo)志(PinInt_Clear)

PinInt_Clear()函數(shù)的功能是按照給定的輸入?yún)?shù),清除對(duì)應(yīng)的引腳中斷標(biāo)志,它的輸入?yún)?shù)和上面那些函數(shù)的輸入?yún)?shù)意義一致,是需要操作的引腳中斷標(biāo)志位的位域值。

通常這個(gè)函數(shù)是在中斷處理函數(shù)中調(diào)用。

代碼片段7.函數(shù)PinInt_Clear()
01  void PinInt_Clear(uint32_t pins_mask)
02  {
03      uint32_t Pin_mask;
04      for (Pin_mask = 1; Pin_mask < 0x100; Pin_mask <<= 1) {
05          if ((pins_mask & Pin_mask) == 0)
06              continue; 
07          if (!(LPC_PIN_INT->ISEL & Pin_mask))
08              LPC_PIN_INT->IST = Pin_mask; 
09      }
10  }

1.3.引腳中斷的使用實(shí)例下面借用GPIO章的例程,略作修改演示引腳中斷的操作。

本例程也是使用LPC824-Lite開(kāi)發(fā)板,循環(huán)執(zhí)行下列操作:

■通過(guò)GPIO循環(huán)點(diǎn)亮板上的八個(gè)紅色LED

■分別點(diǎn)亮八個(gè)紅色LED,模擬一個(gè)小蟲(chóng)爬行

設(shè)置USER(S4)、WAKEUP(S3)和ISP(S2)按鍵分別產(chǎn)生引腳中斷0~2(PINTSEL0/1/2),對(duì)應(yīng)的中斷處理的意義如下:

A.按下USER鍵:循環(huán)體中跳過(guò)上述第2項(xiàng)操作,再按一次USER鍵恢復(fù)1-2循環(huán)。

B.按下WAKEUP鍵:循環(huán)體中跳過(guò)上述第1項(xiàng)操作,再按一次WAKEUP鍵恢復(fù)1-2循環(huán)。

C.按下ISP鍵:循環(huán)體中的操作速度變慢50%,再按一次ISP鍵恢復(fù)默認(rèn)的速度。

D.如果上述2項(xiàng)操作都被跳過(guò),則連續(xù)閃爍所有的LED燈。在例程中引入3個(gè)變量,分別向主循環(huán)傳遞3個(gè)按鍵的不同狀態(tài):

wKgZomV6u-iATmn8AABR3WYCJck041.png

下面的PINT_Init()函數(shù)用于指定哪個(gè)按鍵,作為哪個(gè)中斷的觸發(fā)源,同時(shí)指定由按鍵的上升沿觸發(fā)中斷,最后使能對(duì)應(yīng)的中斷并設(shè)置中斷優(yōu)先級(jí)。

首先需要定義中斷的編號(hào):wKgZomV6u-iAZQ4fAAA4R1L1pY0903.png

代碼片段8.引腳中斷初始化函數(shù)

01  void PINT_Init(void)
02  {
03      LPC_GPIO_PORT->DIRCLR0 = PIN_KEYS_MASK; 
04      
05      LPC_SYSCON->PINTSEL[INT_USERKEY] = PIN_USERKEY;
06      LPC_SYSCON->PINTSEL[INT_WAKEKEY] = PIN_WAKEKEY; 
07      LPC_SYSCON->PINTSEL[INT_ISPKEY] = PIN_ISPKEY;
08      
09      PinInt_Reset();
10      PinInt_Enable_Rising((1<
11                         | (1<
12                         | (1<
13      
14      NVIC_EnableIRQ(PININT0_IRQn); 
15      NVIC_EnableIRQ(PININT1_IRQn); 
16      NVIC_EnableIRQ(PININT2_IRQn);
17    
18      NVIC_SetPriority(PININT0_IRQn, 3);
19      NVIC_SetPriority(PININT1_IRQn, 3); 
20      NVIC_SetPriority(PININT2_IRQn, 3);
21  }

下面是本例程的主函數(shù)片斷,和中斷處理程序的代碼,略去了上面描述的2項(xiàng)操作的具體實(shí)現(xiàn),讀者可以參考GPIO章節(jié)中的代碼。

代碼片段9.引腳中斷主函數(shù)片斷
01      PINT_Init();
02      skip_step1 = skip_step2 = 0; 
03      leds_speed = 100;
04      while (1) {
05          if (skip_step1 == 0) {
06              LPC_GPIO_PORT->SET0 = PIN_LEDS_MASK; // 熄滅所有燈
07  
08          }
09  
10          if (skip_step2 == 0) {
11              LPC_GPIO_PORT->SET0 = PIN_LEDS_MASK; // 熄滅所有燈
12  
13              }
14          }
15          
16          if (skip_step1 && skip_step2) {
17              LPC_GPIO_PORT->NOT0 = PIN_LEDS_MASK; // 翻轉(zhuǎn)所有燈
18              Wait1ms(leds_speed);
19          }
20      } // 結(jié)束while(1)循環(huán)

代碼片段10.引腳中斷的中斷處理函數(shù)
01  void PININT0_IRQHandler(void)
02  {
03      if (LPC_PIN_INT->RISE & (1<
04          skip_step1 = !skip_step1;
05      PinInt_Clear(1 << INT_USERKEY); 
06  }
07  
08  void PININT1_IRQHandler(void)
09  {
10      if (LPC_PIN_INT->RISE & (1<
11          skip_step2 = !skip_step2;
12      PinInt_Clear(1<
13  }
14  
15  void PININT2_IRQHandler(void)
16  {
17      if (LPC_PIN_INT->RISE & (1<
18          if (leds_speed == DEFAULT_SPEED) 
19              leds_speed = DEFAULT_SPEED + DEFAULT_SPEED/2; 
20          else
21              leds_speed = DEFAULT_SPEED;
22      PinInt_Clear(1<
23  }

上述三個(gè)中斷處理程序的最后一個(gè)語(yǔ)句,都是調(diào)用PinInt_Clear ()函數(shù)清除對(duì)應(yīng)的中斷標(biāo)志。這個(gè)清除標(biāo)志的語(yǔ)句都是不受是否有上升沿中斷影響,即使進(jìn)入該中斷處理函數(shù)時(shí)發(fā)生的事件不是上升沿,也會(huì)執(zhí)行清除標(biāo)志操作,這樣安排是為防止有遺漏的中斷,而造成反復(fù)進(jìn)入中斷處理程序而死機(jī)。 1.4 模式匹配引擎功能和使用

式匹配引擎實(shí)現(xiàn)引腳的組合邏輯,組合邏輯結(jié)果可以通過(guò)狀態(tài)位由軟件檢測(cè),也可以是引腳中斷的延伸,產(chǎn)生中斷請(qǐng)求,還可以向CPU核心發(fā)送事件信號(hào)和/或在某個(gè)引腳上輸出。

前面介紹的引腳中斷功能,每個(gè)中斷只能由來(lái)自某個(gè)單個(gè)引腳的狀態(tài)變化而產(chǎn)生;而通過(guò)模式匹配引擎,根據(jù)多個(gè)引腳的組合邏輯運(yùn)算結(jié)果,可以產(chǎn)生對(duì)應(yīng)的中斷。例如可以實(shí)現(xiàn)一個(gè)鍵盤,鍵盤的每個(gè)按鍵可以單獨(dú)產(chǎn)生中斷,用于判斷哪個(gè)鍵被按下,也可以使用組合邏輯功能,當(dāng)某個(gè)特定的按鍵組合被按下,才能產(chǎn)生中斷,這樣可以更加方便地檢測(cè)諸如Ctrl-C、Ctrl-V這樣的組合功能。

1.4.1模式匹配引擎

一個(gè)邏輯運(yùn)算表達(dá)式或布爾運(yùn)算表達(dá)式,是由布爾變量經(jīng)基本的”與”、”或”、”非”和”異或”等布爾運(yùn)算構(gòu)成。

下面是一些布爾運(yùn)算表達(dá)式的例子:

例1. A*B + B*C + A*C

例2. D*C + A*B*C + A*D*E

例3. A + B*C*D + B*E*F + G*A*D

在LPC800的模式匹配引擎中,每個(gè)布爾變量與一個(gè)輸入引腳一一對(duì)應(yīng),最多允許有8個(gè)布爾變量參與運(yùn)算,同時(shí)所有變量出現(xiàn)次數(shù)的總和不能多于8個(gè)。

LPC800的模式匹配引擎可以直接支持”與”、”或”、”非”運(yùn)算,但不能原生支持”異或”運(yùn)算,需要由軟件配置實(shí)現(xiàn)”異或”運(yùn)算,如下:

A ^ B = A*/B + /A*B

在上述例1中總共有3個(gè)布爾變量:A、B和C,它們出現(xiàn)的次數(shù)總和為6次,可以由模式匹配引擎實(shí)現(xiàn)。例2有A~D共5個(gè)布爾變量,出現(xiàn)的總次數(shù)為8次,也可以由模式匹配引擎實(shí)現(xiàn)。但例3中有A~G共7個(gè)布爾變量,出現(xiàn)的總次數(shù)為10次,不能由模式匹配引擎實(shí)現(xiàn)。

1.4.2布爾項(xiàng)的實(shí)現(xiàn)

在模式匹配引擎中,布爾變量的每一次出現(xiàn)以一個(gè)布爾項(xiàng)來(lái)實(shí)現(xiàn),在用戶手冊(cè)中“布爾項(xiàng)”以slice表示。

內(nèi)部實(shí)現(xiàn)中,只有8個(gè)布爾項(xiàng)(slice),因此所有變量出現(xiàn)次數(shù)的總和不能多于8個(gè)。

對(duì)每一個(gè)布爾項(xiàng),用戶可以按照輸入信號(hào)的不同變化,選擇多達(dá)8種不同的條件。這些條件分別是:

1.恒為“高”。這種情況與輸入信號(hào)無(wú)關(guān),對(duì)應(yīng)的布爾項(xiàng)始終為“高”。一般是按照應(yīng)用邏輯,用于設(shè)置閑置的布爾項(xiàng)。

2.鎖存的上升沿。從輸入信號(hào)出現(xiàn)一個(gè)上升沿,到再次寫入模式匹配引擎的控制寄存器之前,對(duì)應(yīng)的布爾項(xiàng)為“高”。在此期間不管輸入信號(hào)如何變化,對(duì)應(yīng)的布爾項(xiàng)不再變化。寫入控制寄存器會(huì)清除這個(gè)布爾項(xiàng)為“低”。

3.鎖存的下降沿。從輸入信號(hào)出現(xiàn)一個(gè)下降沿,到再次寫入模式匹配引擎的控制寄存器之前,對(duì)應(yīng)的布爾項(xiàng)為“高”。在此期間不管輸入信號(hào)如何變化,對(duì)應(yīng)的布爾項(xiàng)不再變化。寫入控制寄存器會(huì)清除這個(gè)布爾項(xiàng)為“低”。

4.鎖存的邊沿。這是上面2個(gè)條件的結(jié)合,輸入信號(hào)的上升沿或下降沿,都會(huì)使對(duì)應(yīng)的布爾項(xiàng)為“高”。同樣,寫入控制寄存器會(huì)清除這個(gè)布爾項(xiàng)為“低”。

5.高電平。當(dāng)輸入信號(hào)為高電平時(shí),對(duì)應(yīng)的布爾項(xiàng)為“高”。注意這個(gè)條件沒(méi)有經(jīng)過(guò)鎖存,即當(dāng)輸入信號(hào)變低時(shí),對(duì)應(yīng)的布爾項(xiàng)也變?yōu)椤暗汀薄?/span>

6.低電平。當(dāng)輸入信號(hào)為低電平時(shí),對(duì)應(yīng)的布爾項(xiàng)為“高”。注意這個(gè)條件沒(méi)有經(jīng)過(guò)鎖存,即當(dāng)輸入信號(hào)變高時(shí),對(duì)應(yīng)的布爾項(xiàng)也變?yōu)椤暗汀?。這個(gè)條件相當(dāng)于布爾“非”運(yùn)算。

7.恒為“低”。這種情況與輸入信號(hào)無(wú)關(guān),對(duì)應(yīng)的布爾項(xiàng)始終為“低”。一般是按照應(yīng)用邏輯。用于設(shè)置閑置的布爾項(xiàng)。

8.實(shí)時(shí)的邊沿事件。當(dāng)檢測(cè)到輸入信號(hào)的上升沿或下降沿時(shí),對(duì)應(yīng)的布爾項(xiàng)為“高”,在一個(gè)時(shí)鐘周期之后,對(duì)應(yīng)的布爾項(xiàng)會(huì)自動(dòng)變?yōu)椤暗汀薄O麓卧俅螜z測(cè)到上升沿或下降沿時(shí),重復(fù)這個(gè)“高-低”的過(guò)程。這個(gè)條件與上面的2、3、4不同,沒(méi)有經(jīng)過(guò)鎖存,只持續(xù)一個(gè)時(shí)鐘周期。

wKgZomV6u-iAXQpmAADzVzerm_A195.png? ? ? ? ? ? ? ? ?圖2.布爾項(xiàng)(slice)的構(gòu)成邏輯

1.4.3 模式匹配引擎的實(shí)現(xiàn)

如果我們把8個(gè)布爾項(xiàng)按順序排列,在每?jī)蓚€(gè)布爾項(xiàng)之間就可以指定“與”或“或”操作。下圖給出了布爾項(xiàng)與操作(符)之間的關(guān)系。

wKgZomV6u-mAXGnmAACOwxj1nwQ482.png? ? ? ? ? ? ? 圖3.布爾項(xiàng)與操作(符)直接的關(guān)系

參看1.4.1布爾表達(dá)式的例子,下面是把它們映射到內(nèi)部布爾項(xiàng)的示意圖。

wKgZomV6u-mAeIWIAACbe35HhSI639.png? ? ? ? ? ? ? 圖4.布爾算式的內(nèi)部實(shí)現(xiàn)示意圖1

wKgZomV6u-mADzvkAAClt-Yd0nk422.png? ? ? ? ? ? ? ??圖5.布爾算式的內(nèi)部實(shí)現(xiàn)示意圖2

整個(gè)模式匹配引擎是由多級(jí)的“與-或”門的級(jí)聯(lián)實(shí)現(xiàn),下圖是完整內(nèi)部實(shí)現(xiàn)示意圖,有經(jīng)驗(yàn)的讀者可以參照用戶手冊(cè)加深理解。

wKgZomV6u-mAQCnpAAGwGH7c7FE174.png? ? ? ? ? ? ? ? ?圖6.模式匹配引擎完整示意圖

1.4.4引腳組合邏輯功能的配置

解釋完布爾項(xiàng)的概念和布爾項(xiàng)的選項(xiàng),以及它們之間的運(yùn)算關(guān)系,接下來(lái)看看與配置寄存器的對(duì)應(yīng)關(guān)系。

共有三個(gè)寄存器用于設(shè)置模式匹配引擎:

▲PMCTRL:模式匹配引擎的控制位和結(jié)果狀態(tài)位。

wKgZomV6u-mAeSGYAACHlf_F2Ic425.png■ SEL_PMATCH?– 用于指定8個(gè)引腳中斷是來(lái)自于引腳中斷功能(見(jiàn)9.1節(jié))還是來(lái)自模式匹配功能(見(jiàn)9.4節(jié))。

■ENA_RXEV – 模式匹配結(jié)果為“真”時(shí),用戶可以配置該位使能向CPU核心發(fā)送RXEV事件并在引腳GPIO_INT_BMAT產(chǎn)生輸出。
RXEV事件用于觸發(fā)WFE(Wait For Event: 等待事件)指令結(jié)束等待狀態(tài)。

■PMAT[7:0] – 這里每一位對(duì)應(yīng)布爾組合(i)的輸出,見(jiàn)圖37。

▲PMSRC:指定每個(gè)布爾項(xiàng)使用哪個(gè)輸入引腳

wKgZomV6u-mAEDWoAABWRz0YK6U047.png■如果要指定PINTSEL[n]對(duì)應(yīng)的引腳,作為布爾項(xiàng)i的輸入,只需要設(shè)置SRC(i)=n即可。

▲PMCFG:指定每個(gè)布爾項(xiàng)如何參與運(yùn)算,同時(shí)指定結(jié)果輸出結(jié)點(diǎn)。

wKgZomV6u-qAWSbBAABlhrQ6mac907.png■CFG[7:0] – 每一個(gè)分量用于選擇對(duì)應(yīng)布爾項(xiàng)與輸入信號(hào)的關(guān)系,見(jiàn)1.4.2描述的8種情況。

■Prod_Endpts[6:0] – 如果某一位為‘0’,表示對(duì)應(yīng)的操作為‘與’,見(jiàn)圖3。某位為‘1’表示對(duì)應(yīng)的操作為‘或’,并且需要輸出前面各個(gè)布爾項(xiàng)相與的結(jié)果到PMAT[i],和對(duì)應(yīng)的中斷請(qǐng)求。
注意,不存在Prod_Endpts7。即使有這一位,它也會(huì)始終為‘1’。

1.4.5 模式匹配引擎的中斷

可以用模式匹配(引腳組合邏輯)的結(jié)果產(chǎn)生中斷,當(dāng)PMATn為’1’時(shí),如果使能了對(duì)應(yīng)的PININTn中斷,則這些分項(xiàng)(見(jiàn)圖6中的綠色標(biāo)注的信號(hào)),可以觸發(fā)中斷。這些中斷的觸發(fā)方式,在芯片內(nèi)部固定設(shè)置為高電平觸發(fā),不能由軟件配置。

既然是電平觸發(fā),這個(gè)中斷不能由軟件清除,只要這個(gè)信號(hào)為高,中斷就會(huì)反復(fù)出現(xiàn),直到該分項(xiàng)變?yōu)榈?。如果不希望反?fù)進(jìn)入中斷,可以嘗試使用“實(shí)時(shí)的邊沿事件”作為組合條件(見(jiàn)1.4.2的第8個(gè)選項(xiàng))。

1.5.模式匹配引擎的設(shè)置在配置模式匹配引擎之前,建議用戶先按照自己的布爾表達(dá)式,填寫下面的表格。

■第一行PinInt的每個(gè)位置,填寫對(duì)應(yīng)PININT0~7的引腳編號(hào)。未用位置不填。

■第二行SliceSrc的每個(gè)位置,填寫每個(gè)布爾項(xiàng)對(duì)應(yīng)的PININTn編號(hào)n,取值范圍是0~7。

■第三行SliceCfg的每個(gè)位置,填寫如何配置每個(gè)布爾項(xiàng),見(jiàn)1.4.2節(jié),取值使用下述定義的常量:

wKgZomV6u-qAWBmcAAAZJdXp7Cg602.png

■第四行SliceEndp的每個(gè)位置,填寫’0’表示這個(gè)位置執(zhí)行“與”運(yùn)算并沒(méi)有結(jié)果輸出;填寫非’0’的值,表示這個(gè)位置執(zhí)行“或”運(yùn)算并輸出結(jié)果。芯片中沒(méi)有SliceEndp第7個(gè)位置對(duì)應(yīng)的配置位,此處內(nèi)容無(wú)效。

wKgZomV6u-qAVSdVAAAM9o21BKM277.png

此表格的目的是在寫代碼之前有一個(gè)完整的概念,這樣寫代碼時(shí)不會(huì)產(chǎn)生各個(gè)寄存器內(nèi)容不匹配的問(wèn)題。

下面再定義幾個(gè)宏,配合上述表格就可以很容易地實(shí)現(xiàn)對(duì)模式匹配引擎的設(shè)置。

首先參考1.4.4節(jié)的寄存器說(shuō)明,定義一組移位操作的宏,每三位代碼為一組進(jìn)行移位:

#define PMPOS0(src) (((src)&0x7)<<8)

#define PMPOS1(src) (((src)&0x7)<<11)

#define PMPOS2(src) (((src)&0x7)<<14)

#define PMPOS3(src) (((src)&0x7)<<17)

#define PMPOS4(src) (((src)&0x7)<<20)

#define PMPOS5(src) (((src)&0x7)<<23)

#define PMPOS6(src) (((src)&0x7)<<26)

#define PMPOS7(src) (((src)&0x7)<<29)

接下來(lái)是涉及PMCFG的低6位的另一組移位操作的宏:

#define PMep0(ep) (((ep)&0x1)<<0)

#define PMep1(ep) (((ep)&0x1)<<1)

#define PMep2(ep) (((ep)&0x1)<<2)

#define PMep3(ep) (((ep)&0x1)<<3)

#define PMep4(ep) (((ep)&0x1)<<4)

#define PMep5(ep) (((ep)&0x1)<<5)

#define PMep6(ep) (((ep)&0x1)<<6)

然后使用上述宏,定義SliceSrc如下,逐個(gè)填入上述表格第二行的所有內(nèi)容,然后寫入PMSRC寄存器進(jìn)行初始化:

wKgZomV6u-qAIgYXAAAXh9tBRV8371.png定義SliceCfg如下,逐個(gè)填入上述表格第三行的所有內(nèi)容:wKgZomV6u-qAa7ENAAAXNdL9WFs885.png定義ProdEndp如下,逐個(gè)填入上述表格第四行的所有內(nèi)容,再和SliceCfg宏的結(jié)果相’或’ ,寫入PMCFG寄存器進(jìn)行初始化:wKgZomV6u-qAarReAAAUgvyLmX8999.png

下面再用實(shí)例說(shuō)明初始化設(shè)置的過(guò)程。

1.6.模式匹配引擎的使用實(shí)例1.6.1異或的實(shí)現(xiàn)

假定有一個(gè)電梯控制器,它只有兩個(gè)按鈕,一個(gè)“向上”,一個(gè)“向下”,如果分別單獨(dú)按下任一個(gè)按鈕,電梯會(huì)按指定方向運(yùn)行,如果兩個(gè)按鈕同時(shí)按下,則電梯不會(huì)運(yùn)行。這就是“異或”操作邏輯。

下面的代碼用USERKEY和ISPKEY,分別代表“向上”和“向下”按鈕,用模式匹配引擎實(shí)現(xiàn)這個(gè)“異或”操作邏輯。

整個(gè)的布爾表達(dá)式是:

USERKEY * NOT(ISPKEY) + NOT(USERKEY) * ISPKEY

按照這個(gè)表達(dá)式填寫前述表格如下:

wKgZomV6u-qAKv-bAAA0sPEJsqM657.png照前面的介紹,解讀這個(gè)表格就很容易了:■第一行:USERKEY對(duì)應(yīng)PININT0;ISPKEY對(duì)應(yīng)PININT1。

■第二行:PININT0對(duì)應(yīng)布爾項(xiàng)0、2;PININT1對(duì)應(yīng)布爾項(xiàng)1、3。

■第三行:布爾項(xiàng)0、3的輸入為“高電平”有效;布爾項(xiàng)1、2的輸入為“低電平”有效。布爾項(xiàng)4~7的輸入恒為“低”,在最終結(jié)果中不產(chǎn)生影響。

■第四行:PMAT[1]得到布爾項(xiàng)0、1相與的結(jié)果;PMAT[3]得到布爾項(xiàng)2、3相與的結(jié)果。

下面的初始化代碼實(shí)現(xiàn)了上述表格的內(nèi)容:

代碼片段11.“異或”模式匹配初始化函數(shù)
01  void PM_Init(void)
02  {
03      LPC_SYSCON->PINTSEL[0] = PIN_USERKEY; 
04      LPC_SYSCON->PINTSEL[1] = PIN_ISPKEY;
05  
06  #if !PM_POLLING
07      NVIC_EnableIRQ(PININT1_IRQn); 
08      NVIC_EnableIRQ(PININT3_IRQn); 
09    
10      NVIC_SetPriority(PININT1_IRQn, 3);
11      NVIC_SetPriority(PININT3_IRQn, 3); 
12  #endif  // PM_POLLING
13      
14      LPC_PIN_INT->PMSRC = SliceSrc(0, 1, 1, 0, 0, 0, 0, 0);
15      LPC_PIN_INT->PMCFG = SliceCfg(SLICE_DIRECT,
16                                    SLICE_NOT,
17                                    SLICE_DIRECT,
18                                    SLICE_NOT,
19                                    SLICE_CONST0, 
20                                    SLICE_CONST0, 
21                                    SLICE_CONST0,
22                                    SLICE_CONST0) | 
23                           ProdEndp(0, 1, 0, 1, 0, 0, 0); 
24      LPC_PIN_INT->PMCTRL = 0x03; 
25      
26      ConfigSWM(GPIO_INT_BMAT, PIN_LED0);
27  }

上述代碼段的14、15行是對(duì)模式匹配寄存器的初始化,這里用到了上一節(jié)定義的宏。

本例程有兩種操作模式:輪詢和中斷模式。在輪詢模式中,軟件循環(huán)地檢測(cè)PMCTRL寄存器的PMAT域,當(dāng)檢測(cè)到布爾輸出項(xiàng)1或3為’1’時(shí),分別點(diǎn)亮LED1或LED3,否則熄滅LED。下面的PM_Polling()函數(shù)會(huì)被主循環(huán)調(diào)用,執(zhí)行循環(huán)檢測(cè)。

代碼片段12.循環(huán)檢測(cè)PMAT狀態(tài)函數(shù)
01  void PM_Polling(void)
02  {
03      uint32_t  PMAT = LPC_PIN_INT->PMCTRL>>24; 
04    
05      if (PMAT & (1<<1))
06          LPC_GPIO_PORT->CLR0 = 1<
07      else if (PMAT & (1<<3))
08          LPC_GPIO_PORT->CLR0 = 1<
09      else
10          LPC_GPIO_PORT->SET0 = 1<
11  }

在中斷模式下,需要安排兩個(gè)中斷處理程序PININT1_IRQHandler()和PININT3_IRQHandler(),分別接收布爾輸出項(xiàng)1和3的中斷。

代碼片段13.中斷處理函數(shù)

01  #if ! PM_POLLING
02  void PININT1_IRQHandler(void) 
03  {
04      LPC_GPIO_PORT->CLR0 = 1<
05  }
06  
07  void PININT3_IRQHandler(void)
08  {
09      LPC_GPIO_PORT->CLR0 = 1<
10  }
11  #endif  // PM_POLLING

最后是主函數(shù)。代碼片段14.模式匹配初始化函數(shù)

01  int main()
02  {
03      GPIO_Init();
04      
05      LPC_GPIO_PORT->DIRSET0 = PIN_LEDS_MASK;     // 設(shè)置LED對(duì)應(yīng)的引腳為輸出
06      LPC_GPIO_PORT->SET0 = PIN_LEDS_MASK;        // 熄滅所有LED燈
07      
08      PINT_Init();  // 初始化引腳中斷模塊
09      PM_Init();    // 初始化模式匹配模塊,見(jiàn)代碼片段21
10        
11      while(1) {
12  #if PM_POLLING
13          PM_Polling();
14  #else
15          LPC_GPIO_PORT->SET0 = 1<
16  #endif
17          LPC_PIN_INT->RISE = 0xFF;
18          LPC_PIN_INT->FALL = 0xFF; 
19      }
20  }

中斷模式下,當(dāng)沒(méi)有中斷時(shí),主函數(shù)的第15行會(huì)不斷地熄滅LED。但當(dāng)有某個(gè)按鈕按下時(shí),由于模式匹配的中斷是電平中斷,一旦產(chǎn)生中斷的條件存在,代碼片段23的中斷處理函數(shù)就會(huì)不斷地被調(diào)用,CPU將不能執(zhí)行主函數(shù)中的指令。這樣當(dāng)僅按下一個(gè)按鈕時(shí),使用者就會(huì)看見(jiàn)對(duì)應(yīng)的LED常亮,直到松開(kāi)按鈕。松開(kāi)按鈕后,產(chǎn)生中斷的條件消失,CPU才能返回主函數(shù),LED被熄滅。

在代碼片段21的模式匹配初始化函數(shù)的第26行,模式匹配的結(jié)果輸出信號(hào)GPIO_INT_BMAT被映射到對(duì)應(yīng)LED0的引腳,通過(guò)LED0的狀態(tài)可以直觀地看到整個(gè)邏輯運(yùn)算的結(jié)果。綜合起來(lái)會(huì)有如下效果:wKgZomV6u-qAYCCWAAARjscYv7Q970.png1.6.2三人表決器

三人表決器就是每人一個(gè)按鈕,任意兩人按下按鈕則表示表決通過(guò)。

本實(shí)例使用開(kāi)發(fā)板上的三個(gè)按鍵USERKEY、WAKEKEY和ISPKEY。首先填寫初始化的表格:wKgZomV6u-qALH9nAAAx5Afjl4w682.png

所有的布爾項(xiàng)都使用“鎖存的上升沿”作為模式匹配的輸入。電路的配置是按下按鍵會(huì)把引腳短接到地,因此抬起按鍵的動(dòng)作會(huì)產(chǎn)生上升沿,經(jīng)過(guò)內(nèi)部鎖存,可以保證不同按鍵的按下時(shí)間不同,但狀態(tài)不會(huì)丟失。

下面是這個(gè)三人表決器的初始化函數(shù),可以看出這個(gè)函數(shù)內(nèi)容基本和上面例子的函數(shù)一樣,只是代入的參數(shù)不同:

代碼片段15.“三人表決器”模式匹配初始化函數(shù)

01  void PM_Init(void)
02  {
03      LPC_SYSCON->PINTSEL[0] = PIN_USERKEY;
04      LPC_SYSCON->PINTSEL[1] = PIN_WAKEKEY;
05      LPC_SYSCON->PINTSEL[2] = PIN_ISPKEY;
06  
07  #if !PM_POLLING
08      NVIC_EnableIRQ(PININT1_IRQn); 
09      NVIC_EnableIRQ(PININT3_IRQn); 
10      NVIC_EnableIRQ(PININT5_IRQn);
11    
12      NVIC_SetPriority(PININT1_IRQn, 3);
13      NVIC_SetPriority(PININT3_IRQn, 3); 
14      NVIC_SetPriority(PININT5_IRQn, 3);
15  #endif  // PM_POLLING
16      
17      LPC_PIN_INT->PMSRC = SliceSrc(0, 1, 1, 2, 2, 0, 0, 0);
18      LPC_PIN_INT->PMCFG = SliceCfg(SLICE_RISE,
19                                    SLICE_RISE,
20                                    SLICE_RISE,
21                                    SLICE_RISE,
22                                    SLICE_RISE, 
23                                    SLICE_RISE, 
24                                    SLICE_CONST0,
25                                    SLICE_CONST0) | 
26                           ProdEndp(0, 1, 0, 1, 0, 1, 0); 
27      LPC_PIN_INT->PMCTRL = 0x03; 
29      
30      ConfigSWM(GPIO_INT_BMAT, PIN_LED0);
31  }

以下是主函數(shù)中的主循環(huán)部分。

代碼片段16.“三人表決器”主循環(huán)部分

01      while(1) {
02          TimeOut_Ctrl();
03  #if PM_POLLING
04          PM_Polling();
05  #else
06          LPC_GPIO_PORT->SET0 = 1<
07  #endif
08      }

在主循環(huán)下,同樣有中斷模式和輪詢模式的區(qū)分。操作和前面的“異或”例程一致。

特殊的是,這個(gè)例程設(shè)置了一個(gè)超時(shí)處理,能夠定期地清除投票狀態(tài)。

代碼片段17.“三人表決器”的超時(shí)處理
01  void TimeOut_Ctrl()
02  {
03      if (uwTick > 10) { 
04          LPC_GPIO_PORT->NOT0 = 1<
05          uwTick = 0;
06              
07          LPC_PIN_INT->PMCTRL = 0x00; 
08          LPC_PIN_INT->PMCTRL = 0x03;
09      }
10  }

代碼片段18.“三人表決器”中斷模式的中斷處理

01  void PININT1_IRQHandler(void)
02  {
03      LPC_GPIO_PORT->CLR0 = 1<
04      TimeOut_Ctrl();
05  }

以下是這個(gè)例程演示的效果:

wKgZomV6u-uAez6VAABPb90G64g848.png

表中的“投”表示按鍵被按下并被釋放。如果只按下按鍵,而保持按下而不釋放,模式匹配模塊不會(huì)判斷它為按下?tīng)顟B(tài),這種情況可以理解為,投票者還在猶豫。

當(dāng)LED0亮?xí)r表示不夠兩個(gè)人以上投票,投票沒(méi)有通過(guò);LED0熄滅表示投票通過(guò)。

在使用這個(gè)例程的中斷模式時(shí),由于各個(gè)中斷的優(yōu)先級(jí)一致,同時(shí)由于電平中斷的緣故,如果一旦進(jìn)入了某個(gè)中斷,有可能另一個(gè)布爾項(xiàng)的中斷不能被響應(yīng),結(jié)果LED1/3/5中有些時(shí)候不能被同時(shí)點(diǎn)亮。這種現(xiàn)象,不會(huì)出現(xiàn)在輪詢模式下。讀者由此可以體會(huì)到輪詢與中斷的區(qū)別。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17123

    瀏覽量

    350992
  • 恩智浦
    +關(guān)注

    關(guān)注

    14

    文章

    5857

    瀏覽量

    107319
  • 引腳
    +關(guān)注

    關(guān)注

    16

    文章

    1193

    瀏覽量

    50412
  • 組合邏輯
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    10038
  • LPC800
    +關(guān)注

    關(guān)注

    1

    文章

    17

    瀏覽量

    22453

原文標(biāo)題:LPC800前生今世-第八章 引腳中斷和引腳組合邏輯 (Pin Interrupt & Pin Pattern)

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    《測(cè)控電路》習(xí)題完整參考答案(第八章

    《測(cè)控電路》習(xí)題完整參考答案(第八章
    發(fā)表于 05-07 11:39

    LPC800系列LPC824介紹

    LPC800 系列是 NXP 推出的以 ARM Cortex-M0+ 為核心的 32 位 MCU,為基本微控制器應(yīng)用提供了一系列低功耗、節(jié)省空間、低引腳數(shù)的選項(xiàng)。同時(shí),LPC800系列MCU包含
    發(fā)表于 09-23 09:05

    波形的產(chǎn)生與變換電路 第八章PPT

    波形的產(chǎn)生與變換電路 第八章
    發(fā)表于 04-20 09:33 ?19次下載
    波形的產(chǎn)生與變換電路 <b class='flag-5'>第八章</b>PPT

    信號(hào)發(fā)生電路基礎(chǔ) 第八章

    信號(hào)發(fā)生電路基礎(chǔ) 第八章 8.1正弦波振蕩電路1、振蕩電路:是一種不需要外接輸入信號(hào)就能將直流能源轉(zhuǎn)換成具有一定頻率、一定幅度和一定波形的交流能量
    發(fā)表于 04-20 13:58 ?49次下載

    第八章 線性離散控制系統(tǒng)分析

    第八章 線性離散控制系統(tǒng)分析 數(shù)字控制系統(tǒng)是一種以數(shù)字計(jì)算機(jī)為控制器去控制具有連續(xù)工作狀態(tài)的被控對(duì)象的閉環(huán)控制系統(tǒng)。
    發(fā)表于 05-27 15:50 ?0次下載

    51單片機(jī)第八章素材

    單片機(jī)第八章素材練習(xí),主要講解單片機(jī)的初步應(yīng)用只是,配合protues使用,加強(qiáng)對(duì)單片機(jī)有關(guān)知識(shí)的理解。
    發(fā)表于 11-16 18:53 ?1次下載

    電子技術(shù)基礎(chǔ)模擬部分第五版_第八章習(xí)題答案.pdf

    電子技術(shù)基礎(chǔ)模擬部分第五版_第八章習(xí)題答案.pdf,作業(yè)題解答!
    發(fā)表于 04-11 17:44 ?0次下載

    《測(cè)控電路》習(xí)題完整參考答案(第八章

    《測(cè)控電路》習(xí)題完整參考答案(第八章
    發(fā)表于 02-14 17:02 ?0次下載

    lpc800技術(shù)手冊(cè)

    智浦重新設(shè)計(jì)了LPC800系列外設(shè),盡可能精簡(jiǎn)產(chǎn)品,響應(yīng)速度更快且更加高效。相比傳統(tǒng)的8位MCU,其優(yōu)勢(shì)顯而易見(jiàn)的。 定時(shí)器在不增加復(fù)雜性的情況下引入了全新靈活度,包括開(kāi)關(guān)矩陣在內(nèi)的LPC800革命性功能使設(shè)計(jì)師只需通過(guò)配置工具中的一行代碼或一次點(diǎn)擊,就能將片內(nèi)外設(shè)分配到
    發(fā)表于 10-24 20:04 ?13次下載
    <b class='flag-5'>lpc800</b>技術(shù)手冊(cè)

    電路《電路原理》邱關(guān)源---第八章 相量法

    電路《電路原理》邱關(guān)源---第八章 相量法
    發(fā)表于 01-18 11:37 ?0次下載

    IC工藝和版圖設(shè)計(jì)第八章Latch-up和GuardRing設(shè)計(jì)

    IC工藝和版圖設(shè)計(jì)第八章Latch-up和GuardRing設(shè)計(jì)
    發(fā)表于 02-10 18:11 ?0次下載

    第八章 外部中斷

    第一節(jié)原理解讀打算寫一下中斷,又忍不住想說(shuō)一下中斷的概念,去書(shū)上翻一翻,或者自己在搜索引擎上搜一下,都可以找到一大堆,包括本文寫的這個(gè)外部中斷也不例外。如果要寫光是中斷就可以單獨(dú)寫一篇
    的頭像 發(fā)表于 01-25 09:30 ?1406次閱讀
    <b class='flag-5'>第八章</b> 外部<b class='flag-5'>中斷</b>

    LPC800前生今世 第二-系列總覽

    LPC800系列總覽 前面一已經(jīng)簡(jiǎn)要地介紹了LPC800的基本特性和系列中各產(chǎn)品之間的對(duì)比。本章將通過(guò)框圖的形式,給出更詳細(xì)的配置信息,并引導(dǎo)讀者從框圖中捕捉到有用的信息。 LPC
    的頭像 發(fā)表于 09-21 11:55 ?579次閱讀

    LPC800前生今世 第六-開(kāi)關(guān)矩陣(SWM: Switch Matrix)

    總體概述 開(kāi)關(guān)矩陣顧名思義就是一個(gè)由多個(gè),甚至多組開(kāi)關(guān)組成的陣列,這個(gè)陣列的目的就是把片內(nèi)外設(shè)的輸入輸出信號(hào)線,按照用戶的意向,通過(guò)編程連接到特定的外部引腳上。 開(kāi)關(guān)矩 陣可以為LPC800的使用者
    的頭像 發(fā)表于 10-26 09:25 ?2325次閱讀
    <b class='flag-5'>LPC800</b><b class='flag-5'>前生</b><b class='flag-5'>今世</b> 第六<b class='flag-5'>章</b>-開(kāi)關(guān)矩陣(SWM: Switch Matrix)

    LPC800 前生今世-第七 輸入輸出控制器(GPIO)

    一款 MCU ,最重要的是要有輸入輸出引腳,引腳的數(shù)量要夠豐富,功能要夠齊全,還要有靈活的輸入輸出控制方式。 在 LPC800 系列中提供了很多封裝和輸入輸出引腳數(shù)量的選項(xiàng): 表1
    的頭像 發(fā)表于 11-02 08:55 ?718次閱讀
    <b class='flag-5'>LPC800</b> <b class='flag-5'>前生</b><b class='flag-5'>今世</b>-第七<b class='flag-5'>章</b> 輸入輸出控制器(GPIO)
    主站蜘蛛池模板: 色噜噜狠狠一区二区三区| 久久精品麻豆国产天美传媒果冻| 亚洲伊人精品| 欧美精品熟妇乱| 国产精品在线手机视频| 20岁αsrian男同志免费| 四虎亚洲中文字幕永久在线 | 嫩草影院成人| 国产精品无码AV天天爽人妻蜜桃 | 国产日韩精品一区二区在线观看| 在线视频 中文字幕| 日韩欧美国产免费看清风阁| 精品国产精品人妻久久无码五月天| x8国产精品视频| 在线黑人抽搐潮喷| 性满足久久久久久久久| 欧美日韩永久久一区二区三区| 精品亚洲一区二区三区在线播放| 阿离被扒开双腿疯狂输出| 在线视频 国产 日韩 欧美| 消息称老熟妇乱视频一区二区 | 最近中文字幕2019国语4| 亚洲AV久久无码高潮喷水| 人人澡人人爽人人精品| 捆绑白丝粉色JK震动捧喷白浆| 国产在线精品视亚洲不卡| 国产69精品久久久久无码麻豆| 99久久国产露脸精品竹菊传煤| 野花韩国高清完整版在线 | 国产精品久久国产三级国不卡顿| caoporn 超碰在线视频| 97人妻在线公开视频在线观看| 夜夜国产亚洲视频香蕉| 亚洲国产高清在线| 午夜日韩久久影院| 视频一区视频二区ae86| 人人妻免费线| 日日摸夜夜嗷嗷叫日日拍| 人人碰79免费视频| 日本xxx在线观看免费播放| 欧美video巨大粗暴18|