PIC32MZ tutorial -- Hello World

发布者:shmilyde最新更新时间:2017-01-20 来源: eefocus关键字:PIC32MZ  tutorial  Hello  World 手机看文章 扫描二维码
随时随地手机看文章

  Today I implement "Hello World" on PIC32MZ EC starter kit. The application of "Hello World" only lights up a LED. There are three LEDs on the starter kit board -- LED1 and LED2 and LED3.  At the moment, I only light LED1 on RH0.


      Every PIC application has to set several configuration bits, PIC32 is no exception. So we start with configuration bits. The following is the configuration bits I set for the "Hello world" application.



// PIC32MZ2048ECH144 Configuration Bit Settings


// 'C' source line config statements


#include


// DEVCFG3  BFFFFFFF

// USERID = No Setting

#pragma config FMIIEN = ON // Ethernet RMII/MII Enable (MII Enabled)   // in MII Mode, you need a 25MHz XTAL, in RMII Mode, need a 50MHz Clock.

#pragma config FETHIO = ON // Ethernet I/O Pin Select (Default Ethernet I/O)

#pragma config PGL1WAY = ON // Permission Group Lock One Way Configuration (Allow only one reconfiguration)

#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 = OFF // USB USBID Selection (Controlled by Port Function)


// DEVCFG2  7FF9B11A

#pragma config FPLLIDIV = DIV_3 // System PLL Input Divider (3x Divider)

#pragma config FPLLRNG = RANGE_5_10_MHZ // System PLL Input Range (5-10 MHz Input)

#pragma config FPLLICLK = PLL_POSC // System PLL Input Clock Selection (POSC is input to the System PLL)

#pragma config FPLLMULT = MUL_50 // System PLL Multiplier (PLL Multiply by 50)

#pragma config FPLLODIV = DIV_2 // System PLL Output Clock Divider (2x Divider)

#pragma config UPLLFSEL = FREQ_24MHZ // USB PLL Input Frequency Selection (USB PLL input is 24 MHz)

#pragma config UPLLEN = OFF // USB PLL Enable (USB PLL is disabled)


// DEVCFG1  7F7F3839

#pragma config FNOSC = SPLL // Oscillator Selection Bits (System PLL)

#pragma config DMTINTV = WIN_127_128 // DMT Count Window Interval (Window/Interval value is 127/128 counter value)

#pragma config FSOSCEN = OFF // Secondary Oscillator Enable (Disable SOSC)

#pragma config IESO = OFF // Internal/External Switch Over (Disabled)

#pragma config POSCMOD = EC // Primary Oscillator Configuration (External clock mode)

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

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

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

#pragma config WDTSPGM = STOP // Watchdog Timer Stop During Flash Programming (WDT stops during Flash programming)

#pragma config WINDIS = NORMAL // Watchdog Timer Window Mode (Watchdog Timer is in non-Window mode)

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

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

#pragma config DMTCNT = DMT31 // Deadman Timer Count Selection (2^31 (2147483648))

#pragma config FDMTEN = OFF // Deadman Timer Enable (Deadman Timer is disabled)


// DEVCFG0  FFFFFFF7

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

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

#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select (Communicate on PGEC2/PGED2)

#pragma config TRCEN = ON // Trace Enable (Trace features in the CPU are enabled)

#pragma config BOOTISA = MIPS32 // Boot ISA Selection (Boot code and Exception code is MIPS32)

#pragma config FECCCON = OFF_UNLOCKED // Dynamic Flash ECC Configuration (ECC and Dynamic ECC are disabled (ECCCON bits are writable))

#pragma config FSLEEP = OFF // Flash Sleep Mode (Flash is powered down when the device is in Sleep mode)

#pragma config DBGPER = ALLOW_PG2 // Debug Mode CPU Access Permission (Allow CPU access to Permission Group 2 permission regions)

#pragma config EJTAGBEN = NORMAL // EJTAG Boot (Normal EJTAG functionality)


// DEVCP0

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


// SEQ0


// DEVADC1


// DEVADC2


// DEVADC3


// DEVADC4


// DEVADC5


      Please remember a configuration bit can only be programmed logic 0, the unprogrammed state is logic 1, and device configuration bits may vary according to hardware and software. An important point is that PLL must output between 350 and 700 MHz. The PLL output is 400MHz in my configuration. Anyway, above configuration words work to me till now.


  Configuration bits is set, then we will continue with main function. The main function is very simple, just toggle H0 to logic 1. But before we do that, we should change the direction of H0 to be output. For 8-bit PIC, we usually code that like below.


     TRISHbits.TRISH0 = 0;   // clear TRISH bit0,  H0 to be output

     PORTHbits.RH0 = 1;      // set PORTH bit0

  But for PIC32, below code is recommended (use LATx to write IO, PORTx to read IO).


    TRISHbits.TRISH0 = 0;

    LATHbits.LATH0 = 0;

  Every PIC32 I/O module register has a corresponding CLR(clear), SET(set) and INV(invert) register designed to provide fast atomic bit manipulations, a value written to a SET, CLR or INV register effectively performs the implied operation, but only on the corresponding base register and only bits specified as '1' as modified. Bits specified as '0' are not modified.


  So the above implemention has alternative option


    TRISHCLR = (1<<0);    // TRISH bit0 clear 

    LATHSET = (1<<0);     // LATH bit0 set '1'

     It almost like 


    TRISH &= 0xFFFFFFFE;

    LATH  |= 0x00000001;

  But it performs faster and more effectively than above. So far, there is an important point not to clarify. The I/O port H0 mixes with analog feature, and the analog feature should be disabled. For this point, PIC32MZ is different than PIC32MX. On PIC32MX devices, the analog function of an I/O pin was determined by the PCFGx bit in AD1PCFG register. On PIC32MZ devices, the analog selection function has been moved into a separate register on each I/O port. Clear ANSxy (ANSELx) bit to select digital mode.


  Finally, the main code of "Hello world" is


#include


#include "ConfigurationBits.h"


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

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

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


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

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

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


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

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

#define LED_OPEN()        ANSELH &= 0xFFFFFFFE


void main()

{

    LED_OPEN();

    LED_IOCTL();

    LED_SETON();

    while (1)

    {

        ; // do nothing

    }

}


关键字:PIC32MZ  tutorial  Hello  World 引用地址:PIC32MZ tutorial -- Hello World

上一篇:PIC32MZ tutorial -- Blinky LED
下一篇:采用TCP协议实现PIC18F97J60 ethernet bootloader

推荐阅读最新更新时间:2024-03-16 15:31

富士康、Keyssa®和三星联合推出颠覆性的“Connected World”智能
多家科技公司及Keyssa投资者日前宣布发起“Connected World”计划,它是一个着眼于在移动设备和与日俱增的联网设备间实现超高速数据传输的项目;参与其中的公司及投资者包括世界最大的电子制造企业鸿海精密工业股份有限公司(也称为富士康),高速、非接触式技术领导厂商Keyssa®,为汽车制造商和消费者提供联网产品和解决方案的领导厂商三星电子,以及iPod、iPhone的发明人及Nest的创始人Tony Fadell先生。 关于其规范 建立Connected World生态系统的核心要素是Keyssa专有的Kiss Connectivity连接技术,其Kiss Connector是专有的、微型化、低成本、低功耗、全固态
[手机便携]
PIC32MZ】Usart串口通讯
串口通讯是一个很成熟的通讯协议,几乎所有MCU都配有串口,本篇将述在Harmony中如何使用Usart,使用设备为PIC32MZ2048EFH,其他PIC32MZ基本相似。 以下使用的是Harmony的动态驱动,要注意动态驱动的使用规则,动态驱动排序为Driver中配置顺序,即InstanceIndex,而非Usart ID的顺序。 串口使用流程如下,以串口2为例: 1、配置串口驱动 2、配置串口引脚 3、生成代码,使用串口 注意Dynamic的驱动对象都需要有一个Open动作来创建一个Handle,后续所有操作都是用Handle来代表这个驱动对象。所有动态驱动的中断都是采用注册回调函数的方式来使用,无需到sy
[单片机]
【<font color='red'>PIC32MZ</font>】Usart串口通讯
IoT World 2019十大精彩技术产品
IoT World2019在美国硅谷圣克拉拉会议中心开幕,有超过300家IoT领域厂商以及包括T-Mobile,Verizon等运营商参展,再参展产品包括IoT 硬件、开发板、数据分析工具、云连接、IoT周边连接、电源产品等,这里对IoT World2019十大精彩技术产品做一介绍(排名不分先后)。 1、瑞萨的无电池嵌入式方案 在瑞萨电子展台我看到他们展示的一种最新嵌入式低功耗技术--STOB(SILICON ON THIN BURIED OXIDE硅基浅埋氧化物工艺),据介绍,它是瑞萨电子独家开发一种低功耗工艺技术, 打破了以往低工作电流和低待机电流消耗只能任选其一的限制。 SOTB可以让两者兼得另外,SOTB 支持
[物联网]
IoT <font color='red'>World</font> 2019十大精彩技术产品
德科智控:和方向盘说拜拜,来和线控转向Say Hello
在汽车一百多年的历史中,都无人质疑它的用途——从A点送到B点。但在几百公里的旅途中,除了把着方向盘目视前方,我们别无选择。只有让机器控制机器,才能真正的解放人类。 “干掉方向盘”像是一场关于移动生活方式的技术革命。更自由的座舱空间,更高的功能安全等级,和更低的量产成本,无限拓宽了自动驾驶向前发展的可能。就无人驾驶技术而言,“有没有方向盘”这件事,还得转向系统说了算。 根据SAE自动驾驶分级可知,在L3自动驾驶级别以下,方向盘需要随时准备被驾驶员接管。意味着在这一阶段,驾驶员仍然无法实现真正的“自由”。其转向执行机构EPS受限于安装空间、力传递特性、角传递特性等诸多因素,无法进行自由设计。 线控转向系统(Steer
[汽车电子]
德科智控:和方向盘说拜拜,来和线控转向Say <font color='red'>Hello</font>
2007年全球及我国十大半导体公司排名
  2007年全球十大半导体公司   Top 10 Semiconductor Companies in the World        2007年全球十大半导体公司   Top 10 Semiconductor Companies in the World
[安防电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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