日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]  An interrupt is an internal or external event that requires quick attention from the controller. The PIC32MZ architecture provides a rich interrupt system that can manage up to 190 sources of inte

  An interrupt is an internal or external event that requires quick attention from the controller. The PIC32MZ architecture provides a rich interrupt system that can manage up to 190 sources of interrupts. Each interrupt source can have a unique piece of code, called the Interrupt Service Routine (ISR) directly associated via a pointer, also called a "vector", to provide the required response action.


  At the moment, I use Timer1 interrupt as a example to show how to enable interrupt and how to write interrupt service routine for PIC32MZ. The implementation has three parts. The first is the Timer1 interfaces. The second is interrupts interfaces. And the third is the Timer1 interrupt service routine.


  The Timer1 interfaces include TMR1_Open() and TMR1_Write(). In the TMR1_Open(), will enable Timer1 and Timer1 interrupt. configure Timer1 to overflow and interrupt per millisecond. set Timer1 interrupt priority level and subpriority level. Below code show me how to do that.



/**

Function: TMR1_Open


Summary: Initialization of Timer


Description: TMR1 on; 0.08 microsecond every tick, overflow and interrupt per ms


Remarks: Pre-scale 1:8; PB 100MHz; PR1 0x30D3

*/

// TODO Insert function definitions (right here) to leverage live documentation

void TMR1_Open(void)

{

T1CON = 0x8010;

PR1 = 0x30D3;

IPC1SET = 0x5;

IEC0SET = 0x10;

IFS0CLR = 0x10;

}

// Comment a function definition and leverage automatic documentation

/**

Function: TMR1_Write


Summary: Write TMR1


Description: Write a value to TMR1


Remarks: the value is range of 0~65535

*/

// TODO Insert function definitions (right here) to leverage live documentation

void TMR1_Write(unsigned int value)

{

TMR1 = value & 0xFFFF;

}


  The interrupts interfaces include EnableINT(), DisableINT() and SelectMultiVector(). When we want to use any interrupt source, call EnableINT() to enable interrupt module first. PIC32 have two interrupt vector modes, the singlevector mode and multivector mode. SelectMultiVector() will help to set interrputs for multivector mode. I do that like below.



/**

@Function

EnableINT


@Summary

Enable interrupts


@Remarks

This function need to be called first before using any interrupt source

*/

void EnableINT(void)

{

asm volatile("ei");

}


/**

@Function

DisableINT


@Summary

Disable interrupts


@Remarks

*/

void DisableINT(void)

{

asm volatile("di");

}


/**

@Function

SelectMultiVector


@Summary

Set system to use multivector mode for interrupts


@Remarks

*/

void SelectMultiVector(void)

{

unsigned long MVEC_MASK = 0x1000;

INTCONSET = MVEC_MASK;

}


  At the end, I show the main function and the Timer1 interrupt service routine. There are styles of interrupt service routine, the interrupt attribute style, like


__attribute__((interrupt([IPLn[SRS|SOFT|AUTO]]))),


and the interrupt pragma style, like


# pragma interrupt function-name IPLn[AUTO|SOFT|SRS] [vector

[@]vector-number [, vector-number-list]]

# pragma interrupt function-name single [vector [@] 0


  It strongly recommend the first style. So there they are.



#include

#include "TMR.h"

#include "Interrupt.h"

#include "ConfigurationBits.h"


//#define LED_IOCTL() TRISHbits.TRISH0 = 0

//#define LED_SETON() LATHbits.LATH0 = 1

//#define LED_SETOFF() LATHbits.LATH0 = 0

//#define LED_OPEN() ANSELHbits.ANSH0 = 0


//#define LED_IOCTL() TRISH &= 0xFFFFFFFE

//#define LED_SETON() LATH |= 0x00000001

//#define LED_SETOFF() LATH &= 0xFFFFFFFE

//#define LED_OPEN() ANSELH &= 0xFFFFFFFE


#define LED_IOCTL() TRISHCLR = (1<<0)

#define LED_SETON() LATHSET = (1<<0)

#define LED_SETOFF() LATHCLR = (1<<0)

#define LED_ONOFF() LATHINV = (1<<0)

#define LED_OPEN() ANSELH &= 0xFFFFFFFE


volatile unsigned int COUNTER;


void __attribute__((vector(_TIMER_1_VECTOR), interrupt(ipl1AUTO), nomips16)) TMR1_ISR(void)

{

if (COUNTER++ >= 300)

{

COUNTER = 0;

LED_ONOFF();

}

TMR1_Write(0);

IFS0CLR = 0x10; // Clear flag

}


void main(void)

{

LED_OPEN();

LED_IOCTL();

TMR1_Open();

TMR1_Write(0);

SelectMultiVector();

EnableINT();

COUNTER = 0;

while (1)

{

; // do nothing

}

}


  This application run well on PIC32MZ EC starter kit. I see the LED blink perfectly as expectation.


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

Microchip公司的PIC32MZ EF系列是高達(dá)250MHz的集成浮點(diǎn)單元(FPU),具有廣泛的外設(shè)和包括局域網(wǎng)(CAN)的極好的連接選擇,工作電壓2.1V到 3.6V,DSP增強(qiáng)核具有四

關(guān)鍵字: Microchip pic32mz 處理器

使用的是STM32F407的板子,程序參考的是STM32F4xx固件庫的DAC_SignalsGeneration文件夾下的程序。官方例程分別使用了DAC的禁止生成波(DAC_WaveGeneration_None)的E...

關(guān)鍵字: dac dma STM32 timer 輸出正弦波

  In my last post I implement "Key Debounce" with port polling, port polling is not very efficient....

關(guān)鍵字: pic32mz tutorial change notification

  In my older blog "PIC32MZ tutorial -- Key Debounce", I shows how to acheive key debounce with port...

關(guān)鍵字: interrupt pic32mz tutorial external

8051 系列 MCU 的基本結(jié)構(gòu)包括:32 個(gè) I/O 口(4 組8 bit 端口);兩個(gè)16 位定時(shí)計(jì)數(shù)器;全雙工串行通信;6 個(gè)中斷源(2 個(gè)外部中斷、2 個(gè)定時(shí)/計(jì)數(shù)器中斷、1 個(gè)串口輸入/輸出中斷),兩級(jí)中斷優(yōu)...

關(guān)鍵字: interrupt using 中斷優(yōu)先級(jí) c51中斷

所有的中斷(外部中斷,定時(shí)器中斷……)運(yùn)行的結(jié)果都是一樣的:流水燈逐個(gè)點(diǎn)亮,當(dāng)中斷響應(yīng)的時(shí)候,流水燈全部熄滅,當(dāng)中斷結(jié)束的時(shí)候,流水燈繼續(xù)剛才的流動(dòng)。proteus原理圖:1.外部中斷:代碼:#include#incl...

關(guān)鍵字: interrupt 單片機(jī)中斷

經(jīng)過千辛萬苦,今天終于完工PIC32MZ EC Starter Kit的ethernet bootloader項(xiàng)目。我將整個(gè)項(xiàng)目, 命名為PhnBootloader。它分為兩個(gè)部分。第一個(gè)部分是PC 端的host程序Ph...

關(guān)鍵字: bootloader ethernet pic32mz udp協(xié)議

  At this moment, I accomplish the interface of UART communication for PIC32MZ EC Starter Kit. This interface...

關(guān)鍵字: communication pic32mz tutorial uart

  Core Timer is a very popular feature of PIC32 since it isa piece of the MIPS M4K core itself and is common t...

關(guān)鍵字: core pic32mz timer tutorial

8051 系列 MCU 的基本結(jié)構(gòu)包括:32 個(gè) I/O 口(4 組8 bit 端口);兩個(gè)16 位定時(shí)計(jì)數(shù)器;全雙工串行通信;6 個(gè)中斷源(2 個(gè)外部中斷、2 個(gè)定時(shí)/計(jì)數(shù)器中斷、1 個(gè)串口輸入/輸出中斷),兩級(jí)中斷優(yōu)...

關(guān)鍵字: c51中斷 interrupt using
關(guān)閉