PIC32MX795F512L代码示例及说明

上传人:tia****g98 文档编号:134125990 上传时间:2022-08-12 格式:DOC 页数:16 大小:592KB
返回 下载 相关 举报
PIC32MX795F512L代码示例及说明_第1页
第1页 / 共16页
PIC32MX795F512L代码示例及说明_第2页
第2页 / 共16页
PIC32MX795F512L代码示例及说明_第3页
第3页 / 共16页
点击查看更多>>
资源描述
基于PIC32MX795F512L的Ethernet Starter Kit简单应用手册一、 单片机基本概念1.1 单片机学习三要素单片机学习包括三部分,其一单片机开发板,其二,PC机上的开发环境,即MPLAB,其三,两者的连接器,即USB连接的DEBUG调试器。三者关系如图1-1所示。图1-1 单片机开发三要素单片机这里所用的单片机型号为PIC32MX795F512L型号单片机,此单片机所拥有的主要资源有:1、80MHz的主频,1.56DMIPS/MHz,总线32位;2、USB 2.0 接口;3、2个带1024缓存的CAN 2.0接口;4、8通道DMA通道;5、5级流水线,哈佛架构;6、1个以太网接口;7、512K的Flash,外加12k的启动Flash;8、128K的RAM;9、可编程中断向量控制器;10、16个10位AD转换器;11、UART/SPI/IIC等串行通信方式;12、带JTAG调试口,具有休眠功能,节省能耗。更具体资源可以参考PIC32MX795F512L.pdf。MPLAB的介绍详见第二章。USB连接器,本质上是从单片机内部的JTAG线通过一块芯片把JTAG转为USB通信方式,然后直接连到PC机上,与MPLAB间接通信。更多情况,一般都会独立做一个仿真器,功能如上所述。更为详细的单片机知识可以参考:1、PIC单片机实用教程基础篇;2、PIC单片机实用教程提高篇;3、上相应目录下的资料;4、PIC论坛或MPLAB开发工具下的help等。1.2 单片机最小系统所谓单片机最小系统,通俗的说法就是能让单片机工作的最小电路,其中包括提供单片机主频的时钟,提供电压的电源电路,复位电路,外加验证系统完整性的指示灯电路。参看图1-2。图1-2 单片机最小系统组成二、 MPLAB的学习开发环境的选择,跟所使用的单片机型号有关系,这里必须使用8.43版本以上。详细说明可以参看MPLAB实用说明。三、 Ethernet Start Kit的介绍首先可以参看PIC32_Starter_Kits_Users_Guide.pdf。3.1 原理图介绍表3-1 CPU各管脚功能管脚序号管脚名称管脚类型1RG15/AERXERRIO/I2VDDP3RE5/PMD5IO/IO4RE6/PMD6IO/IO5RE7/PMD7IO/IO6RC1/T2CKIO/I7RC2/T3CK/AC2TXIO/I/O8RC3/T4CK/AC2RXIO/I/I9RC4/T5CK/SDI1IO/I/I10CN8/RG6/U2ARTS/U2BTX/SCK2A/PMA5/ECOLI/IO/O/O/IO/O/I11CN9/RG7/U2ARX/SDI2A/SDA2/PMA4/ECRSI/IO/I/I/IO/O/I12CN10/RG8/U2ATX/SDO2A/SCL2/PMA3/ERXDVI/IO/O/O/IO/O/I13MCLRIP14CN11/RG9/U2ACTS/U2BRX/SS2A/PMA2/ERXCLKI/IO/I/I/IO/O/I15VSSP16VDDP17RA0/SCL3AIO/IO18INT1/RE8/AERXD0I/IO/I19INT2/RE9/AERXD1I/IO/I20AN5/CN7/RB5/CVREFOUT/VBUSONI/I/IO/O/O21AN4/CN6/RB4/CVREF+I/I/IO/I22AN3/CN5/RB3/C1OUTI/I/IO/O23AN2/CN4/RB2/C1IN+I/I/IO/I24AN1/CN3/RB1/PGEC1I/I/IO/I25AN0/CN2/RB0/PGED1I/I/IO/IO26AN6/OCFA/RB6/PGEC2I/I/IO/I27AN7/RB7/PGED2I/IO/IO28RA9/TDO/PMA7/AERXD2/VREF-IO/O/O/I/I29RA10/RTCC/PMA6/AERXD3/VREF+IO/O/O/I/I30AVDDP31AVSSP32AN8/RB8/C1IN-I/IO/I33AN9/RB9/C2IN-I/IO/I34AN10/RB10/CVREF-/PMA13I/IO/I/O35AN11/RB11/PMA12/ERXERR/AETXERRI/IO/O/I/O36VSSP37VDDP38RA1/SDA3AIO/IO39RF13/U3ARTS/U3BTX/SCK3A/AC1TXIO/O/O/IO/O40RF12/U3ACTS/U3BRX/SS3A/AC1RXIO/I/O/IO/I41AN12/RB12/PMA11/ERXD0/AECRSI/IO/O/I/I42AN13/RB13/PMA10/ERXD1/AECOLI/IO/O/I/I43AN14/RB14/C2OUT/PMALH/ERXD2/AETXD3I/IO/O/O/I/O44AN15/CN12/OCFB/RB15/C2IN+/PMALL/ERXD3/AETXD2I/I/I/IO/I/O/I/O45VSSP46VDDP47CN20/RD14/U1ACTS/U1BRX/SS1A/AETXD0I/IO/I/I/IO/O48CN21/RD15/U1ARTS/U1BTX/SCK1A/AETXD1I/IO/O/O/IO/O49CN17/RF4/U3ARX/SDI3A/SDA2A/PMA9I/IO/I/I/IO/O50CN18/RF5/U3ATX/SDO3A/SCL2A/PMA8I/IO/O/O/IO/O51RF3/USBIDIO/I52RF2/U1ARX/SDI1AIO/I/I53RF8/U1ATX/SDO1AIO/O/O54VBUSI55VUSBP56RG3/D-I/IO57RG2/D+I/IO58RA2/SCL1A/PMA0IO/IO/IO59RA3/SDA1A/PMA1IO/IO/IO60RA4/TMSIO/I61RA5/TCKIO/I62VDDP63CLKI/OSC1/RC12I/IO64CLKO/OSC2/RC15O/IO65VSSP66INT3/RA14/SCL1/AETXCLKI/IO/IO/I67INT4/RA15/SDA1/AETXENI/IO/IO/O68IC1/RD8/TDI/EMDIOI/IO/I/IO69IC2/RD9/SS1I/IO/IO70IC3/RD10/SCK1/PMA15/PMCS2I/IO/IO/O/O71IC4/RD11/PMA14/PMCS1/EMDCI/IO/O/O/O72OC1/INT0/RD0/SDO1O/I/IO/O73SOSC1/CN1/RC13I/I/IO74SOSCO/CN0/RC14/T1CKO/I/IO/I75VSSP76OC2/RD1O/IO77OC3/RD2O/IO78OC4/RD3O/IO79IC5/RD12/PMD12/ETXD2I/IO/IO/O80CN19/RD13/PMD13/ETXD3I/IO/IO/O81CN13/OC5/RD4/PMWRI/O/IO/O82CN14/RD5/PMRDI/IO/O83CN15/RD6/PMD14/ETXENI/IO/IO/O84CN16/RD7/PMD15/ETXCLKI/IO/IO/I85VCAPP86VDDP87RF0/PMD11/C1RX/ETXD1IO/IO/I/O88RF1/PMD10/C1TX/ETXD0IO/IO/O/O89RG1/PMD9/C2TX/ETXERRIO/IO/O/O90RG0/PMD8/C2RXIO/IO/I91RA6/TRCLKIO/O92RA7/TRD3IO/O93RE0/PMD0IO/IO94RE1/PMD1IO/IO95RG14/TRD2IO/O96RG12/TRD1IO/O97RG13/TRD0IO/O98RE2/PMD2IO/IO99RE3/PMD3IO/IO100RE4/PMD4IO/IO3.2时钟设置PIC32MX795F512L单片机的时钟系统有如下特征:1)内外共四个时钟源;2)用户可以通过PLL对输入频率进行分频、倍频和通过对内外频率的选择分频输出初始操作频率;3)软件控制各时钟源4)通过FSCM(a Fail-Safe Clock Monitor)监控时钟失败或安全与否;5)通过片上PLL决定USB主频。其具体的内部结构图如3-1。图3-1 时钟框图从图3-1的左边看到,有四个时钟源,分别为:XTAL、FRC Oscillator 8MHz typical、LPRC Oscillator、32.768KHz。具体见图3-2。图3-2 时钟源的选择决定最后输出的主时钟通过设置寄存器DEV_CONFIG1中的FNOSC位来控制,有7种选择方式,具体如下:1)000时,FRC模式,即时钟直接来至于FRC Oscillator 8MHz typical;见图3-3。其中,FRC=8MHz。图3-3 FRC时钟源2)001时,FRCPLL模式,见图3-4图3-4 FRCPLL时钟源其中,FRCPLL=8MHz/FPLLIDIV*PLLMULT/PLLODIV3)010时,XT、HS、EC模式,见图3-5。其中,XT、HS、EC=外部时钟图3-5 XT、HS、EC时钟源4)011时,XTPLL、HSPLL、ECPLL模式,见图3-6图3-6 XTPLL、HSPLL、ECPLL时钟源其中,XTPLL、HSPLL、ECPLL=8MHz/FPLLIDIV*PLLMULT/PLLODIV具体实现代码如下:#pragma config FNOSC = PRIPLL / Oscillator Selection#pragma config FPLLIDIV = DIV_2 / PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)#pragma config FPLLMUL = MUL_20 / PLL Multiplier#pragma config FPLLODIV = DIV_1 / PLL Output Divider5)100时,Sosc模式,见图3-7,其中Sosc=32.768KHz图3-7 Sosc时钟源6)101时,LPRC模式,见图3-8,其中LPRC=31.25KHz图3-8 LPRC时钟源7)110时,保留8)111时,FRCDIV模式,见图3-9(1)、3-9(2),其中FRC/16=500KHz,FRC/N=8MHz/FRCDIV图3-9(1)FRC/16时钟源图3-9(2)FRCDIV时钟源除了需要确定CPU的主频外,外围设备的时钟需经过图3-10的处理,其中PBCLK=系统主频/PBDIV图3-10 外设主频具体实现代码如下:#pragma config FPBDIV = DIV_1 / Peripheral Clock divisor从时钟系统框图中看到,时钟模块中还包括时钟监控模块,见图3-11图3-11 时钟监控模块具体实现代码如下:#pragma config FCKSM = CSDCMD / Clock Switching & Fail Safe Clock Monitor#pragma config OSCIOFNC = OFF / CLKO Enable总结以上这些,可以得到如图3-12的时钟系统框图。图3-12 时钟系统框图除了上述的基本时钟部分,还有一些细节需要处理,主要包括第一、二时钟源的选择,内外部时钟源的选择等。其中第一时钟源选择,见图3-13。图3-13 第一时钟源的使能具体实现代码如下:#pragma config POSCMOD = XT / Primary Oscillator内外部时钟源的选择,见图3-14。图3-14 内部外时钟的选择具体实现代码如下:#pragma config IESO = OFF / Internal/External Switch-over第二时钟的使能,见图3-15。图3-15 第二时钟源使能具体实现代码如下:#pragma config FSOSCEN = OFF / Secondary Oscillator Enable四、 实例分析4.1 IO端口的基本操作简化的硬件原理图,见图4-1图4-1 IO端口实例的简单硬件说明图 源代码解析搞懂此代码需要了解:最小系统(时钟最重要),中断,I/O/ Adds support for PIC32 Peripheral library functions and macros#include /外围设备库/ Configuration Bits实现两个功能,一,选择主频时钟,二,调试模式选择。具体参见datasheet的P113页内容/主频时钟选择,通过配置寄存器DEV_CONFIG2、DEV_CONFIG1#pragma config FNOSC = PRIPLL / Oscillator Selection#pragma config FPLLIDIV = DIV_2 / PLL Input Divider (PIC32 Starter Kit: use divide by 2 only)#pragma config FPLLMUL = MUL_20 / PLL Multiplier#pragma config FPLLODIV = DIV_1 / PLL Output Divider#pragma config FPBDIV = DIV_1 / Peripheral Clock divisor#pragma config FWDTEN = OFF / Watchdog Timer#pragma config WDTPS = PS1 / Watchdog Timer Postscale#pragma config FCKSM = CSDCMD / Clock Switching & Fail Safe Clock Monitor#pragma config OSCIOFNC = OFF / CLKO Enable#pragma config POSCMOD = XT / Primary Oscillator#pragma config IESO = OFF / Internal/External Switch-over#pragma config FSOSCEN = OFF / Secondary Oscillator Enable/调试模式选择,通过配置寄存器DEV_CONFIG0#pragma config CP = OFF / Code Protect#pragma config BWP = OFF / Boot Flash Write Protect#pragma config PWP = OFF / Program Flash Write Protect#pragma config ICESEL = ICS_PGx2 / ICE/ICD Comm Channel Select#pragma config DEBUG = OFF / Debugger Disabled for Starter Kit/ The following is used by the main application#define SYS_FREQ(80000000) /主频80MHz/ IOPORT bit masks can be found in ports.h#define CONFIG (CN_ON) /系统管道打开#define PINS (CN16_ENABLE) /指示灯管道使能#define PULLUPS (CN15_PULLUP_ENABLE | CN16_PULLUP_ENABLE)/两个指示灯的弱上拉电阻使能#define INTERRUPT (CHANGE_INT_ON | CHANGE_INT_PRI_2)/通道中断使能,其中断优先级为2unsigned int dummy; /全局变量,用于外部IO数据的提取缓存/ port_io application codeint main(void) unsigned int last_sw_state = 1;/临时变量,用于记录前一状态的情况。防抖动 /系统配置,主要配置主频 SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); /设置端口D的bit 0和1为输出。 PORTSetPinsDigitalOut(IOPORT_D, BIT_0 | BIT_1); /清空D端口的bit 0和1位内容 PORTClearBits(IOPORT_D, BIT_0 | BIT_1); /设置端口D的bit6和7位为数字输入PORTSetPinsDigitalIn(IOPORT_D, BIT_6 | BIT_7); /配置D端口相应管脚弱上拉功能 mCNOpen(CONFIG, PINS, PULLUPS); /读取D端口的数据 dummy = mPORTDRead(); /中断标志位清空 ConfigIntCN(INTERRUPT); /使能中断向量表 INTEnableSystemMultiVectoredInt(); /初始化总线DBINIT();/输出打印信息DBPRINTF(Welcome to the PIC32 PORT input/output example. n);DBPRINTF(The build date and time is . ( _DATE_ , _TIME_ )n);DBPRINTF(Press SW1 to toggle LED1, press SW2 to toggle LED2 n);/SW1是按钮直接控制指示灯,SW2是通过中断方式进行控制指示灯 while(1) if(PORTDbits.RD6 = 0) /SW1按钮按下,设置D端口的bit0位为1,即LED1灯亮 PORTSetBits(IOPORT_D, BIT_0); /确保按动作已经完成 if(last_sw_state = 1) /输出打印信息,表明SW1按下,如果前一次状态为1时 DBPRINTF(Switch SW1 has been pressed. n);/更新状态信息 last_sw_state = 0; else /SW1没有按下,清空D端口的bit0位,即LED1灯灭 PORTClearBits(IOPORT_D, BIT_0); /确保按动作已经完成 if(last_sw_state = 0) /如果前一状态为0,即SW1已经被释放。 DBPRINTF(Switch SW1 has been released. n); /更新状态信息 last_sw_state = 1; ;/SW2用中断方式处理,其中中断优先级为2,前面已经设置。中断涉及四个因素:开中断、中断标志位、优先级、模式选择void _ISR(_CHANGE_NOTICE_VECTOR, ipl2) ChangeNotice_Handler(void) /读取D端口的bit7的数据,放到全局变量dummy缓存中 dummy = PORTReadBits(IOPORT_D, BIT_7); /清空中断标志位,目的是使其能产生第二次中断 mCNClearIntFlag(); /按钮按着则灯一直亮 if(dummy = BIT_7) /D端口的bit1位清0,即LED2灯灭 PORTClearBits(IOPORT_D, BIT_1); / turn off LED2 DBPRINTF(Switch SW2 has been released. n); else /D端口的bit1位置1,即LED2灯亮 PORTSetBits(IOPORT_D, BIT_1); / turn on LED2 DBPRINTF(Switch SW2 has been pressed. n); 代码中的所有系统自带函数可以通过搜索查看。具体操作过程是开始-程序-microchip-MPLAB C32-Peripheral Library Guide4.2、TCP/IP协议栈的移植移植过程其具体步骤如下:1)在网上2)下载解压缩后直接点击安装,安装步骤默认路径就可以,然后在目录C:Micrachip Solutions v2010-10-19TCPIP Demo App该目录下找到跟实验板相应的工程TCPIP Demo App C32 PIC32_ENET_SK_DM320004_INTERNAL_ETNERNET.mcw3)在工具栏Debugger-select tool-pic32 Starter kit,具体见图4-2图4-2 调试器选择4)工程编译、连接、下载、运行。注意在编译时选择release档见图4-3.图4-3 编译模式的设置5)开发板IP地址的确定,任务栏中,开始-程序-microchip-TCPIP Stack v5.31-MCHPDetect,需等待一段时间后才会出现相应的IP地址。具体见图4-4。图4-4 开发板IP地址的获取6)根据此IP地址,设置PC机上的相应IP,设为同一网段,比如开发板的IP为169.254.28.10,则PC的IP设为169.254.28.10,子网掩码255.255.0.0。具体见图4-5.图4-5 PC上IP的设置7)在网页的网址一栏输入开发板的IP地址,就可以看到相应的内容,具体见图4-6图4-6 登录开发板后的主页
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 机械制造 > 电气技术


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!