PIC32MX450 串口4中断

发布者:SereneNature最新更新时间:2020-03-15 来源: eefocus关键字:PIC32MX450  串口4  中断 手机看文章 扫描二维码
随时随地手机看文章

// mplab  x IDE V1.7


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


 *

 *                  UART Interrupt Example   

 *

 *********************************************************************

 * FileName:        uart_interrupt.c

 * Dependencies:

 * Processor:       PIC32

 *

 * Compiler:        MPLAB XC32

 *                  MPLAB IDE

 * Company:         Microchip Technology Inc.

 *

 * Software License Agreement

 *

 * The software supplied herewith by Microchip Technology Incorporated

 * (the ?Company?) for its PIC32 Microcontroller is intended

 * and supplied to you, the Company?s customer, for use solely and

 * exclusively on Microchip PIC32 Microcontroller products.

 * The software is owned by the Company and/or its supplier, and is

 * protected under applicable copyright laws. All rights are reserved.

 * Any use in violation of the foregoing restrictions may subject the

 * user to criminal sanctions under applicable laws, as well as to

 * civil liability for the breach of the terms and conditions of this

 * license.

 *

 * THIS SOFTWARE IS PROVIDED IN AN ?AS IS? CONDITION. NO WARRANTIES,

 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED

 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A

 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,

 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR

 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.

 *

 *

 * $Id: uart_interrupt.c 9390 2008-06-16 23:43:04Z rajbhartin $

 * $Name: x.x $

 *

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



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

UART Interrupt Example README

 ***********************************************************************************

 * Objective: Become familiar with PIC32MX tool suite and understand

 *  basic UART Interrupt operations.

 *

 * Tools:

 * 1. MPLAB IDE with PIC32MX support

 * 2. C32 Compiler

 * 3. Explorer 16 Rev 4 or 5 board.

 * 4. RS-232 Cable

 * 5. A Terminal program for Windows - HyperTerminal

 *

 *

 ***********************************************************************************

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



#include // Peripheral Library

//#include



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

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

// Section: Configuration bits

// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)

// PBCLK = 40 MHz

// Primary Osc w/PLL (XT+,HS+,EC+PLL)

// WDT OFF

// Other options are don't care

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

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

#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF

#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1





//// DEVCFG3

//// USERID = No Setting

//#pragma config FSRSSEL = PRIORITY_7     // Shadow Register Set Priority Select (SRS Priority 7)

//#pragma config PMDL1WAY = ON            // Peripheral Module Disable Configuration (Allow only one reconfiguration)

//#pragma config IOL1WAY = ON             // Peripheral Pin Select Configuration (Allow only one reconfiguration)

//#pragma config FUSBIDIO = ON            // USB USID Selection (Controlled by the USB Module)

//#pragma config FVBUSONIO = ON           // USB VBUS ON Selection (Controlled by USB Module)

//

//// DEVCFG2

//#pragma config FPLLIDIV = DIV_2         // PLL Input Divider (2x Divider)

//#pragma config FPLLMUL = MUL_20         // PLL Multiplier (20x Multiplier)

//#pragma config UPLLIDIV = DIV_12        // USB PLL Input Divider (12x Divider)

//#pragma config UPLLEN = OFF             // USB PLL Enable (Disabled and Bypassed)

//#pragma config FPLLODIV = DIV_1         // System PLL Output Clock Divider (PLL Divide by 1)

//

//// DEVCFG1

//#pragma config FNOSC = PRIPLL           // Oscillator Selection Bits (Primary Osc w/PLL (XT+,HS+,EC+PLL))

//#pragma config FSOSCEN = ON             // Secondary Oscillator Enable (Enabled)

//#pragma config IESO = ON                // Internal/External Switch Over (Enabled)

//#pragma config POSCMOD = HS             // Primary Oscillator Configuration (HS osc mode)

//#pragma config OSCIOFNC = OFF           // CLKO Output Signal Active on the OSCO Pin (Disabled)

//#pragma config FPBDIV = DIV_1           // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/1)

//#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled)

//#pragma config WDTPS = PS1048576        // Watchdog Timer Postscaler (1:1048576)

//#pragma config WINDIS = OFF             // Watchdog Timer Window Enable (Watchdog Timer is in Non-Window Mode)

//#pragma config FWDTEN = OFF             // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls))

//#pragma config FWDTWINSZ = WISZ_25      // Watchdog Timer Window Size (Window Size is 25%)

//

//// DEVCFG0

//#pragma config DEBUG = OFF              // Background Debugger Enable (Debugger is Disabled)

//#pragma config JTAGEN = ON              // JTAG Enable (JTAG Port Enabled)

#pragma config ICESEL = ICS_PGx1        // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1)

//#pragma config PWP = OFF                // Program Flash Write Protect (Disable)

//#pragma config BWP = OFF                // Boot Flash Write Protect bit (Protection Disabled)

//#pragma config CP = OFF                 // Code Protect (Protection Disabled)



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

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

// Section: System Macros

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

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

#define GetSystemClock()              (80000000ul)

#define GetPeripheralClock()          (GetSystemClock()/(1 << OSCCONbits.PBDIV))

#define GetInstructionClock()         (GetSystemClock())



#define DESIRED_BAUDRATE              (9600)      //The desired BaudRate





void WriteString(const char *string);



int main(void)

{



  // Configure the device for maximum performance but do not change the PBDIV

  // Given the options, this function will change the flash wait states, RAM

  // wait state and enable prefetch cache but will not change the PBDIV.

  // The PBDIV value is already set via the pragma FPBDIV option above..

  SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);

  mJTAGPortEnable(DEBUG_JTAGPORT_OFF);



  INTConfigureSystem(INT_SYSTEM_CONFIG_MULT_VECTOR);

  INTEnableInterrupts();



    PPSOutput(3, RPD9, U4TX); // Set RPF5 pin as output for U2TX

    //PPSInput(4,U4RX,RPD5);

    PPSInput(4, U4RX, RPB2);

    PORTSetPinsDigitalIn(IOPORT_B, BIT_2);

  // Explorer-16 uses UART4 to connect to the PC.

  // This initialization assumes 36MHz Fpb clock. If it changes,

  // you will have to modify baud rate initializer.

  UARTConfigure(UART4, UART_ENABLE_PINS_TX_RX_ONLY);

  UARTSetFifoMode(UART4, UART_INTERRUPT_ON_TX_NOT_FULL | UART_INTERRUPT_ON_RX_NOT_EMPTY);

  UARTSetLineControl(UART4, UART_DATA_SIZE_8_BITS | UART_PARITY_NONE | UART_STOP_BITS_1);

  //U4MODE = 1 << 3;

  UARTSetDataRate(UART4, GetPeripheralClock(), DESIRED_BAUDRATE);

  UARTEnable(UART4, UART_ENABLE_FLAGS(UART_PERIPHERAL | UART_RX | UART_TX));



  // Configure UART4 RX Interrupt

//  INTEnable(INT_SOURCE_UART_RX(UART4) | INT_SOURCE_UART_TX(UART4), INT_ENABLED);

  INTSetVectorPriority(INT_VECTOR_UART(UART4), INT_PRIORITY_LEVEL_3);

  INTSetVectorSubPriority(INT_VECTOR_UART(UART4), INT_SUB_PRIORITY_LEVEL_0);

  INTEnable(INT_U4RX,INT_ENABLED);

//  INTEnable(INT_U4TX,INT_ENABLED);

  // configure for multi-vectored mode

  //WriteString("22");

  // Let interrupt handler do the work

  while (1)

  {

//     int data = 0;

//    if (UARTReceivedDataIsAvailable(UART4))

//    {

//      // Echo what we just received.

//      //PutCharacter(UARTGetDataByte(UART4));

//      // Clear the RX interrupt Flag

//      INTClearFlag(INT_SOURCE_UART_RX(UART4));

//    }

  }



  return 0;

}

// helper functions

void WriteString(const char *string)

{

  while (*string != '')

    {

      while (!UARTTransmitterIsReady(UART4))

        ;

[1] [2]
关键字:PIC32MX450  串口4  中断 引用地址:PIC32MX450 串口4中断

上一篇:【PIC32MZ】Usart串口通讯
下一篇:Pickit 3 Programmer使用说明及 烧写程序步骤

推荐阅读最新更新时间:2024-11-13 15:24

中断方式在嵌入式操作系统μC/OS-Ⅱ上实现多任务通信
引 言 当今,各种嵌入式的电子产品已经深入到我们生活的方方面面,嵌入式操作系统也已成为最热门的话题之一,其中免费型的实时操作系统μC/OS-Ⅱ因其可移植、可固化、可裁剪、可确定性等特点,已经成功的应用在很多商业产品上。在嵌入式操作系统中,对中断的处理分为两个部分:面向应用的编程接口部分和面向底层的处理部分,因为涉及这两部分的文件众多,关联复杂,对软硬件的熟悉程度要求较高,较之查询方式编写程序过程相应也要复杂一些,所以以往大多数应用都使用查询方式来进行数据通信。但使用中断方式可以提高处理器的工作效率以及提高对实时数据的处理实效,文章将着重讨论如何用中断方式在嵌入式操作系统μC/OS-Ⅱ上实现多任务通信。 S3C44B
[单片机]
用<font color='red'>中断</font>方式在嵌入式操作系统μC/OS-Ⅱ上实现多任务通信
stm32 外部PB8中断
一、初始化该引脚时钟 RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB ,ENABLE); 二、初始化该引脚为外部中断 void GPIO_Config_Init(void) { GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //PB8 dog_wake GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } 三、初始化外
[单片机]
Linux驱动之按键驱动编写(中断方式)
1、查看原理图,确定需要控制的IO端口 打开原理图,确定需要控制的IO端口为GPF0、GPF2、GPG3、GPG11。可以看到它的中断号为IRQ_EINT0、IRQ_EINT2、IRQ_EINT11、IRQ_EINT19 2、查看芯片手册,确定IO端口的寄存器地址,可以看到因为用了两组GPIO端口,所以它的基地址分别为0x56000050、0x56000060。中断方式的寄存器基地址为0x56000088、0x5600008c、0x56000090 3、编写驱动代码,编写驱动代码的步骤如下: 1)、编写出口、入口函数。代码如下,具体说明参考Linux驱动之LED驱动编写 static int second_
[单片机]
Linux驱动之按键驱动编写(<font color='red'>中断</font>方式)
51中断优先级及中断嵌套
基本型80C51系列单片机有5个中断源,2个优先级,每个中断源可通过软件设置为高优先级或低优先级中断,可以实现二级中断服务嵌套。 中断的优先级 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。中断的优先级有:查询优先级和执行优先级。 查询优先级 datasheet上默认的查询优先级(IP寄存器不做设置,上电复位后为00H): 外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行中断 首先查询优先级是不可以更改和设置的,是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序,而与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照上述5
[单片机]
AVR单片机中断模式的串口发送与接收
#include avr/interrupt.h #include util/delay.h int k=0,i=0,j=0; char s ; void usart0_init() { UCSR0A=0X00; UCSR0B = 0x00; UCSR0C=0X00; UCSR0C=(1 UCSZ01)|(1 UCSZ00);//八位数据位 无校验位 UBRR0L=51;//波特率 8MHZ下9600 UBRR0H=0; UCSR0B=(1 TXCIE0)|(1 RXCIE0)|(1 RXEN0)|(1 TXEN0);//接受发送及其中断使能 } /* *程序的作用是将电脑端发送过来
[单片机]
AVRGCC/WinAVR编译环境中断函数的使用方法
早期版本的avr-libc 对中断服务程序的书写提供了两个宏SIGNAL 和INTERRUPT,并且需要包含两个头文件:avr/signal.h 和avr/interrupt.h。新版(如2007 版WINAVR)中,INTERRUPT 宏不再可用,而建议用ISR 宏替代SIGNAL宏,ISR 和SIGNAL 是一回事,但以后的版本中SIGNAL 宏将会逐渐被丢弃,所以新的程序建议使用ISR,也就是使用ISR作为中断服务函数名,下面将举例说明一些具体的中断使用。 一.为什么没有了INTERRUPT? INTERRUPT 宏是各中断嵌套有关的,当中断程序得到执行时AVR 的硬件将全局的中断允许标记清除,其它中断无法再发生,当中断程序
[单片机]
AVRGCC/WinAVR编译环境<font color='red'>中断</font>函数的使用方法
函数指针数组在ARM异常中断处理中的应用
介绍一种简洁、高效、灵活的ARM异常中断处理方法。 在ARM中,由于所有的中断都使用同一个异常中断入口地址,即0x00000018。因此需要在异常中断处理程序中根据相应的中断号调用对应的中断服务函数。 一般有两种处理方式: 1. 在汇编中保存现场,然后调用C语言编写的中断处理程序,任务处理完成之后,再返回到汇编中恢复现场,并返回到断点。其中C语言编写的中断处理程序,通过switch语句对INTOFFSET进行判断,然后散转执行对应的服务函数。 IMPORT IRQ_EXCEPTION 0x00000018 LDR PC,=IRQ_E
[单片机]
stm32F4 串口DMA+环形缓冲区的实现
下面是串口DMA+环形缓冲区的实现,将读写接口抽象出来,实现不定长度的数据收发。 关于环形缓冲区参考: http://blog.csdn.net/jieffantfyan/article/details/53572103 /****************************************************************************** * Copyright (C) 2016, roger * All rights reserved. * * 文件名称: tty.h * 摘 要:控制台驱动 * * 当前版本: 3.0 * 作 者: roger *
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved