Freescale 高级S12系列单片机编程

合集下载

HCS12X微控制器Freescale MC9S12XHZ512数据手册说明书

HCS12X微控制器Freescale MC9S12XHZ512数据手册说明书

MC9S12XHZ512Data SheetCoversMC9S12XHZ384, MC9S12XHZ256 HCS12XMicrocontrollersMC9S12XHZ512Rev. 1.0610/2010To provide the most up-to-date information,the revision of our documents on the World Wide Web will be the most current.Your printed copy may be an earlier revision.To verify you have the latest information available, refer to:/The following revision history table summarizes changes contained in this document. This document contains information for all constituent modules, with the exception of the S12X CPU. For S12X CPU information please refer to CPU12XV2 in the CPU12/CPU12X Reference Manual.Revision HistoryDate RevisionLevelDescriptionJanuary 5, 200601.00New BookApril 20, 200601.01Updated block guide versionsJuly 28, 200601.02Made minor correctionsJanuary 8, 200701.03Added MC9S12XHZ384 and MC9S12XHZ256August 20, 200701.04Updated slew ratesNovember 4, 200801.05Corrected typos on pinout diagramOctober 14, 201001.06Added PartID. Minor updates to ECT, SCI, IIC and XGATE sections.List of ChaptersChapter1MC9S12XHZ Family Device Overview . . . . . . . . . . . . . . . . . . .21 Chapter2Port Integration Module (S12XHZPIMV1). . . . . . . . . . . . . . . . .57 Chapter3512 Kbyte Flash Module (S12XFTX512K4V3). . . . . . . . . . . . .131 Chapter4 4 Kbyte EEPROM Module (S12XEETX4KV2) . . . . . . . . . . . . .175 Chapter5XGATE (S12XGATEV2). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209 Chapter6Security (S12X9SECV2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Chapter7Clocks and Reset Generator (S12CRGV6). . . . . . . . . . . . . . .331 Chapter8Pierce Oscillator (S12XOSCLCPV1) . . . . . . . . . . . . . . . . . . . .371 Chapter9Analog-to-Digital Converter (ATD10B16CV4) . . . . . . . . . . . .377 Chapter10Liquid Crystal Display (LCD32F4BV1) . . . . . . . . . . . . . . . . . .411 Chapter11Motor Controller (MC10B12CV2). . . . . . . . . . . . . . . . . . . . . . .429 Chapter12Stepper Stall Detector (SSDV1). . . . . . . . . . . . . . . . . . . . . . . .461 Chapter13Inter-Integrated Circuit (IICV3) . . . . . . . . . . . . . . . . . . . . . . . .479 Chapter14Freescale’s Scalable Controller Area Network (MSCANV3).507 Chapter15Serial Communication Interface (SCIV5) . . . . . . . . . . . . . . . .561 Chapter16Serial Peripheral Interface (SPIV4) . . . . . . . . . . . . . . . . . . . . .599 Chapter17Periodic Interrupt Timer (PIT24B4CV1) . . . . . . . . . . . . . . . . .625 Chapter18Pulse-Width Modulator (PWM8B8CV1). . . . . . . . . . . . . . . . . .639 Chapter19Enhanced Capture Timer (ECT16B8CV3). . . . . . . . . . . . . . . .671 Chapter20Voltage Regulator (VREG3V3V5) . . . . . . . . . . . . . . . . . . . . . .725 Chapter21Background Debug Module (S12XBDMV2) . . . . . . . . . . . . . .739 Chapter22S12X Debug (S12XDBGV3) Module . . . . . . . . . . . . . . . . . . . .765 Chapter23External Bus Interface (S12XEBIV3). . . . . . . . . . . . . . . . . . . .807 Chapter24Interrupt (S12XINTV1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .831 Chapter25Memory Mapping Control (S12XMMCV3). . . . . . . . . . . . . . . .849Appendix A Electrical Characteristics. . . . . . . . . . . . . . . . . . . . . . . . . . . . .891 Appendix B Package Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .935 Appendix C PCB Layout Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .938 Appendix D Ordering Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .941 Appendix E Detailed Register Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .942Table of ContentsChapter1MC9S12XHZ Family Device Overview1.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211.1.1Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221.1.2Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241.1.3Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241.1.4Device Memory Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261.1.5Part ID Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 1.2Signal Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301.2.1Device Pinout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301.2.2Signal Properties Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331.2.3Detailed Signal Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .361.2.4Power Supply Pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 1.3System Clock Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 1.4Chip Configuration Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 1.5Modes of Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491.5.1User Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491.5.2Low-Power Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501.5.3Freeze Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51 1.6Resets and Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511.6.1Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .511.6.2Effects of Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 1.7COP Configuration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 1.8ATD External Trigger Input Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55Chapter2Port Integration Module (S12XHZPIMV1)2.1lntroduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572.1.1Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572.1.2Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58 2.2External Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 2.3Memory Map and Register Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .652.3.1Port A and Port B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .682.3.2Port C and Port D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .712.3.3Port E. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .732.3.4Port K. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .752.3.5Miscellaneous registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .772.3.6Port AD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .822.3.7Port L. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .872.3.8Port M . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .912.3.9Port P . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .962.3.10Port S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1022.3.11Port T. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1072.3.12Port U. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1132.3.13Port V. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1172.3.14Port W . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121 2.4Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1252.4.1I/O Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1252.4.2Input Register. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1252.4.3Data Direction Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1262.4.4Reduced Drive Register. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1272.4.5Pull Device Enable Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1272.4.6Polarity Select Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1272.4.7Pin Configuration Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 2.5Resets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1282.5.1Reset Initialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 2.6Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1292.6.1General. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1292.6.2Interrupt Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1302.6.3Operation in Stop Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130Chapter3512 Kbyte Flash Module (S12XFTX512K4V3)3.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1313.1.1Glossary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1313.1.2Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1313.1.3Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1323.1.4Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 3.2External Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133 3.3Memory Map and Register Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1343.3.1Module Memory Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1343.3.2Register Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136 3.4Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1503.4.1Flash Command Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1503.4.2Flash Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1533.4.3Illegal Flash Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169 3.5Operating Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1703.5.1Wait Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1703.5.2Stop Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1703.5.3Background Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1703.6Flash Module Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1703.6.1Unsecuring the MCU using Backdoor Key Access. . . . . . . . . . . . . . . . . . . . . . . . . . . .1713.6.2Unsecuring the MCU in Special Single Chip Mode using BDM . . . . . . . . . . . . . . . . .172 3.7Resets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1723.7.1Flash Reset Sequence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1723.7.2Reset While Flash Command Active. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172 3.8Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1723.8.1Description of Flash Interrupt Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173Chapter44 Kbyte EEPROM Module (S12XEETX4KV2)4.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1754.1.1Glossary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1754.1.2Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1754.1.3Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1754.1.4Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176 4.2External Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176 4.3Memory Map and Register Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1764.3.1Module Memory Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1764.3.2Register Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 4.4Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1874.4.1EEPROM Command Operations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1874.4.2EEPROM Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1904.4.3Illegal EEPROM Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 4.5Operating Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2054.5.1Wait Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2054.5.2Stop Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2054.5.3Background Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 4.6EEPROM Module Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2054.6.1Unsecuring the MCU in Special Single Chip Mode using BDM . . . . . . . . . . . . . . . . .206 4.7Resets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2064.7.1EEPROM Reset Sequence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2064.7.2Reset While EEPROM Command Active . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .206 4.8Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2064.8.1Description of EEPROM Interrupt Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207Chapter5XGATE (S12XGATEV2)5.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2095.1.1Glossary of Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2095.1.2Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2105.1.3Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2115.1.4Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211 5.2External Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212 5.3Memory Map and Register Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2135.3.1Register Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213 5.4Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2295.4.1XGATE RISC Core . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2295.4.2Programmer’s Model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2295.4.3Memory Map. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2305.4.4Semaphores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2315.4.5Software Error Detection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 5.5Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2335.5.1Incoming Interrupt Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2335.5.2Outgoing Interrupt Requests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233 5.6Debug Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2335.6.1Debug Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2335.6.2Entering Debug Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2345.6.3Leaving Debug Mode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 5.7Security. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 5.8Instruction Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2355.8.1Addressing Modes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2355.8.2Instruction Summary and Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2395.8.3Cycle Notation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2425.8.4Thread Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2425.8.5Instruction Glossary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2425.8.6Instruction Coding. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315 5.9Initialization and Application Information. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3185.9.1Initialization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3185.9.2Code Example (Transmit "Hello World!" on SCI) . . . . . . . . . . . . . . . . . . . . . . . . . . . .318Chapter6Security (S12X9SECV2)6.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3236.1.1Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3236.1.2Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3236.1.3Securing the Microcontroller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3246.1.4Operation of the Secured Microcontroller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3256.1.5Unsecuring the Microcontroller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3266.1.6Reprogramming the Security Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3276.1.7Complete Memory Erase (Special Modes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328Chapter7Clocks and Reset Generator (S12CRGV6)7.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3317.1.1Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3317.1.2Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3327.1.3Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333 7.2External Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3347.2.1V DDPLL and V SSPLL — Operating and Ground V oltage Pins. . . . . . . . . . . . . . . . . . . .3347.2.2XFC — External Loop Filter Pin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3347.2.3RESET — Reset Pin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .334 7.3Memory Map and Register Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3347.3.1Module Memory Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3357.3.2Register Descriptions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336 7.4Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3507.4.1Functional Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3507.4.2Operating Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3557.4.3Low Power Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .356 7.5Resets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3657.5.1Description of Reset Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3657.5.2Clock Monitor Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3677.5.3Computer Operating Properly Watchdog (COP) Reset. . . . . . . . . . . . . . . . . . . . . . . . .3677.5.4Power On Reset, Low V oltage Reset. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367 7.6Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3687.6.1Real Time Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3687.6.2PLL Lock Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3697.6.3Self Clock Mode Interrupt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .369Chapter8Pierce Oscillator (S12XOSCLCPV1)8.1Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3718.1.1Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3718.1.2Modes of Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3718.1.3Block Diagram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .372 8.2External Signal Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3728.2.1V DDPLL and V SSPLL — Operating and Ground V oltage Pins. . . . . . . . . . . . . . . . . . . .3728.2.2EXTAL and XTAL — Input and Output Pins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3728.2.3XCLKS — Input Signal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374 8.3Memory Map and Register Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374 8.4Functional Description. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3748.4.1Gain Control. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3748.4.2Clock Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3748.4.3Wait Mode Operation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .375。

S12单片机模块应用及程序下载调试

S12单片机模块应用及程序下载调试

线也没有问题,目标板也供电了,但 BDM 还 便无法再对 FLASH 进行正常操作。因此,需
是不工作。
要解除Flash的“保护模式”,执行Unsecure的
解决办法:出现这一问题,最大的可能 操作。BDM for S12(TBDML)提供了Unsecure
是,用户的 CodeWarrio 版本不对,没有利用 的功能,具体的操作过程较为复杂,请参阅用
CodeWarrio V4.1以上的版本进行调试。安装 户手册。
高版本的CodeWarrio即可解决问题。
【常见问题之三】BDM 调试目标板基本正 结语
常,能够下载程序、擦除Flash、设断点调试,
上面提到的问题是在应用过程被“锁死”,之 比较普遍的问题。在设计之前最好能完整地阅
强型捕捉定时器并支持背景调试模式。DG128 而脱离监控程序。S 1 2 系列单片机采用
有112-pin和80-pin两种封装形式,80-pin封 BDM(Background Debug Mode,背景调试模
装的单片机没有引出用于扩展的端口,只引出 式) 调试方式。在 B D M 模式下主要可以实现
了一个 8 路 A/D 接口。
3 方面的功能:
常用接口模块及外部应用
¥ 应用程序的下载与在线更新 ¥ 单片机内部资源的配置与修复
P W M 模块:PWM 脉宽调制波是一种可用
¥ 应用程序的动态调试
程序来控制波形占空比、周期、相位的波形。
【常见问题之一】正确安装了 B D M f o r
162
2006.7
们生产的串行接口地BDM 工具方便的解锁和
擦除。在 2005 年第 4 期《电子产品世界》杂
参考文献:
志中,我中心曾经撰文讲述了 HCS12 单片机

[单片机] S12单片机模块应用及程序下载调试

[单片机] S12单片机模块应用及程序下载调试
自供电
2
闭合
(有跳线)
闭合
(有跳线)
+5V
由BDM供电(不推荐,因为USB供电不足)
3
断开
(无跳线)
闭合
(有跳线)
+3.3V
自供电
4
断开
(无跳线)
断开
(无跳线)
无效
5.2 安装和使用BDM for S12(TBDML):
BDM for S12(TBDML)在PC上的配套软件是Freescale的CodeWarrio for S12的V4.1以上的版本。用户可调用该软件自带的Hiwave.exe程序,并通过BDM for S12(TBDML)来调试MC9S12各种型号单片机。当然,初次使用BDM for S12(TBDML)时,用户还需要在PC上安装相应的驱动程序和动态链接库。具体的使用方法,请参阅用户手册。
另外还需要对于工程文件中 Start12.c中函数 :
void __interrupt 0 _Startup(void) 中
#ifdef _HCS12_SERIALMON
.......
.......
#endif
两句宏命令注释掉,使得其中的对于EEPROM,RAM起始位置控制寄存器初始化语句有效。这样,下载后程序可以运行正常。
下载用户程序至片内资源是监控程序的基本功能。清华大学FreescaleMCU&DSP应用研发中心开发的基于MC9S12DG128的监控程序代码小于4KB,起始地址为$F000处,它把$FF80的中断向量表移到EF80处,顺序不变。用户可以使用$EF80处的中断向量表,此中断向量表和MC9S12DG128手册上的中断向量表顺序相同,只是从$FF80移到了$EF80。监控程序起来时,如果串口在4秒内没有收到数据,就会检查$EFFE-$EFFF(用户复位向量表)是否为FFFF,如果不是,说明FLASH中有用户程序。程序自动调转到$EFFE-$EFFF所指向的用户程序。如果程序起来4秒内串口接到数据或者$EFFE-$EFFF为$FFFF,则进入DEBUG监控程序。

飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序

飞思卡尔单片机S12使用方法及程序单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM 8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL可得40M总线时钟。

9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}}/******************系统时钟初始化****************/void Init_System_Clock(){asm { // 这里采用汇编代码来产生40M的总线LDAB #3STAB REFDVLDAB #4STAB SYNRBRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率BSET CLKSEL,#$80}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC 端的COM口上去。

利用飞思卡尔S12X单片机的XGATE操控LED灯

利用飞思卡尔S12X单片机的XGATE操控LED灯

利用飞思卡尔S12X单片机的XGATE操控LED灯实飞思卡尔在08年就已经推出了HCS12X系列的16位MCU,而这款单片机的典型特点就是采用了双核架构(MPCore),增加了一个RISC核的高效协处理器(英文名叫co-processor,呵呵,潮一把)——XGATE模块,专门负责处理中断任务,也就是说它的使命就是将主核CPU从执行耗时的中断处理程序的工作中解放出来,而专注于执行与应用相关的任务,这种强大的组合实现了最佳的实时事件处理,而且由于XGATE采用的是RISC 指令核,代码高效且主频可以达到主核的2倍,真是牛逼啊,呵呵。

简单的介绍完毕,如果想进一步深入研究的话建议可以买本邵贝贝老师写的《嵌入式系统中的双核技术》里面对XGATE介绍的还是挺细致的,然后再结合HCS12X系列的datasheet(建议到FSL官网上下一个,本文附件为Xgate的部分中文说明手册需结合datasheet)。

其实XGATE简单的用起来的话还是挺容易的,下面就以MC9S12XDP512这款片子为例通过一个简单的IO中断改变LED亮灭的例程(IO中断采用PTH口,LED采用上拉到PORTA口的方式)说说使用XGATE处理中断的完整流程,为了生动些,就主要以图为主了(开发环境采用CW5.0):(1)建立工程,主要注意以下三步就成,其他均默认即可,其中第三幅图建议选择XGATE IN RAM,提高code 执行速度。

(2)建好的例程里,其实在XGATE模块里是默认加了一个软件中断的SoftwareTrigger0_Handler,按照设置它的方法设置用户定义的中断就可以,不过这需要一定基础,咱还是一步步来吧,心急吃不了热豆腐啊,呵呵。

在工程栏里的source文件组下,main.c为主函数文件(这里需要对XGATE进行一下设置);xgate.cxgate文件为XGATE 的主文件,在其中编写我们需要的中断服务程序;xgate.h文件是对XGATE用到的一些声明了,下面就开始以PTH口中断管理PORTA口的LED亮灭为例一步一步的来了(注意我写的中文注释部分,也就是需要添加的地儿):在main.c里在xgate.cxgate文件里,首先需要添加#include <mc9s12xdp512.h>头文件,应为要用到PORTA和H口得定义,这个一定不要忘了。

飞思卡尔S12xs128单片机BDM调试器使用技巧

飞思卡尔S12xs128单片机BDM调试器使用技巧

S12(X)单片机BDM调试器使用技巧第五届全国大学生“飞思卡尔”杯智能气车竞赛限制采用最新的MC9S12XS128(以下简称XS128)单片机作为主控芯片,替代MC9S12DG128。

XS128是Freescale公司推出的S12系列单片机中的一款增强型16位单片机。

片内资源丰富,接口模块有SPI、SCI、IIC、A/D、PWM等常见模块,在汽车电子应用领域具有广泛用途。

XS128和以往大赛使用的S12DG128系列单片机一样,调试接口都是使用Freescale公司传统的BD M(Background Debug Module)接口。

1 MC9S12XS128单片机介绍(1)CPU:增强型16位HCS12 CPU,片内总线时钟最高40 MHz;(2)片内资源:8 KB RAM、128 KB程序闪存、2 KB数据闪存;(3)串行接口模块:SCI、SPI;(4)脉宽调制模块(PWM)可设置成4路8位或者2路16位,逻辑时钟选择频率宽;(5)1个16路12位精度A/D转换器;(6)控制器局域网模块(CAN);(7)增强型捕捉定时器。

MC9S12XS128单片机有112、80和64引脚3种封装形式。

80-pin封装的单片机没有引出用于扩展方式的端口,仅引出了一个8路A/D接口。

竞赛可使用112或80引脚封装器件。

2 BDM接口和使用BDM调试器内部有一个8位的MC9HC08JB16单片机,该单片机有USB接口,可与PC 机信息交互。

HC08单片机和S12单片机间仅使用一根 I/O线通信,这根相连的信号线名为BKGD。

HC08单片机将BKGD置为输出,以串行发送命令,发送完成后转为输入,以接收信息。

S12单片机收到命令后转为输出,根据调试器发来的命令回送信息,然后立即转入接收态。

BDM工具以此方式实现S12单片机的在线调试、内部闪存的烧写等功能。

关于BDM接口的实现,读者可以参考Freescale任何一款S12单片机的器件手册,其对BDM接口的命令字、交互模式等都有详细描述。

Freescale-HCS12和HCS12X-系列单片机简介

Freescale-HCS12和HCS12X-系列单片机简介
《MC9S12XS单片机原理及嵌入式系统开发》
前言
目前世界上的单片机或者微控制器的种类繁 多,单片机供应商也有很多,例如Freescale、 ATMEL、NXP、ST、Microchip、Infineon、TI、 NEC等,其中Freescale(飞思卡尔)公司的8位、 16位和32位单片机性能稳定、品种齐全,针对不 同的应用领域可以选择不同性能、型号的单片机。
MC9S12XS单片机原理 及嵌入式系统开发
《MC9S12XS单片机原理及嵌入式系统开发》
第2章 Freescale HCS12和HCS12X
系列单片机简介
HCS12系列单片机概述 HCS12X系列单片机概述 MC9S12XS128简介 CPU12(X)核 MC9S12XS128的存储器映射 MC9S12XS128内部锁相环模块PLL
① 表示质量认定状态。MC表示完全合格产品,XC表示初始产品,PC表示预测试产品。 ② 表示存储器类型。无表示片内带ROM或者片内没有程序存储器,7表示片内带EPROM 或一次可编程ROM(OTP ROM),8表示片内带EEPROM,9表示片内带Flash存储器。 ③ 表示内核类型。S12表示16位单片机,S08表示8位单片机。 ④ 表示系列。DG表示为D系列产品。 ⑤ 表示存储空间大小及版本。128表示128 KB的Flash存储空间,B为Flash版本。 ⑥ 表示工作温度范围。无表示工作温度范围是0℃~70℃,C表示工作温度范围是
《MC9S12XS单片机原理及嵌入式系统开发》
本章着重介绍Freescale公司的HCS12系列 16位单片机的概况,并和HCS12X系列16位双核 单片机进行简单比较,最后给出HCS12系列单片 机最小系统中各部分的设计方案。
《MC9S12XS单片机原理及嵌入式系统开发》

FreeScale HCS12系列单片机教程(dg128)

FreeScale HCS12系列单片机教程(dg128)

HCS12微控制器系列教程---第一讲:PWM 模块介绍该教程以MC9S12DG128单片机为核心进行讲解,全面阐释该16位单片机资源。

本文为第一讲,开始介绍S12 MCU的PWM模块。

PWM 调制波有8 个输出通道,每一个输出通道都可以独立的进行输出。

每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。

每一个PWM 输出通道都能调制出占空比从0—100% 变化的波形。

PWM 的主要特点有:1、它有8 个独立的输出通道,并且通过编程可控制其输出波形的周期。

2、每一个输出通道都有一个精确的计数器。

3、每一个通道的PWM 输出使能都可以由编程来控制。

4、PWM输出波形的翻转控制可以通过编程来实现。

5、周期和脉宽可以被双缓冲。

当通道关闭或PWM计数器为0时,改变周期和脉宽才起作用。

6、8 字节或16 字节的通道协议。

7、有4 个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。

8、通过编程可以实现希望的时钟周期。

9、具有遇到紧急情况关闭程序的功能。

10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。

HCS12微控制器系列教程---第二讲:PWM 寄存器简介1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位PWMEx 。

它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。

当任意的PWMEx 位置1,则相关的PWM输出通道就立刻可用。

用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。

当输出通道工作在串联模式时(PWMCTL寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道 1 的使能位控制PWM 的输出。

飞思卡尔s12单片机-ATD模块

飞思卡尔s12单片机-ATD模块

Page 6
二、ATD模块简介

• • • • • • •
第十章 单片机片内外模块 ——ATD
S12单片机ADC特性如下:
8/10/12位可选
转换速度较高,8位、8MHz、单次转换时间为2us 采样时间可编程设置 多种转换模式:数据对齐方式、单次/连续转换、转换结果比较 外触发控制 转换序列结束可产生中断,能够使能比较中断 模拟输入引脚与通用I/O口复用 多通道扫描, 1~16 转换序列长度。
ETRIGLE –外部信号触发条件选择位 ETRIGP -
ACMPIE - Internal Clock in Stop Mode Bit 0 = 禁止比较中断 1 = 使能比较中断
ATD Registers 4/12 第十章 单片机片内外模块 ——ATD
ATD Control Register 3 (ATDCTL3)
Page 10
ATD Registers 1/12 第十章 单片机片内外模块 ——ATD
ATD Control Register 0 (ATDCTL0)
WRAP[3-0] - Wrap Around Channel Select
0 = Reserved
X = WRAP[3:0]; 多通道转换模式下,从ANx回绕到AN0 1≤x ≤ 15 仅在ATDCTL5的MULT=1时有效
S8C, S4C,S2C, S1C - Conversion Sequence Length
ATD Registers 5/12 第十章 单片机片内外模块 ——ATD
ATD Control Register 4 (ATDCTL4)
注:写ATDCTL4会终止当前转换序列
SMP[2:0] - Sample Time Select, 采样时间包含的ATD时钟周期

飞思卡尔单片机编程

飞思卡尔单片机编程

关于Codewarrior 中的 .prm 文件网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。

有什么错误请指正。

正文:关于Codewarrior 中的.prm 文件要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。

通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。

一个标准的基于XS128的.prm文件起始内容如下:.prm文件范例:NAMESENDSEGMENTSRAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;ROM_4000 = READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF;ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF; //OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF;EEPROM_01 = READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010BFF; EEPROM_02 = READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO 0x020BFF; EEPROM_03 = READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO 0x030BFF; EEPROM_04 = READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO 0x040BFF; EEPROM_05 = READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO 0x050BFF; EEPROM_06 = READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO 0x060BFF; EEPROM_07 = READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO 0x070BFF;PAGE_F8 = READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BFFF; PAGE_F9 = READ_ONLY DATA_FAR IBCC_FAR 0xF98000 TO 0xF9BFFF; PAGE_FA = READ_ONLY DATA_FAR IBCC_FAR 0xFA8000 TO 0xFABFFF; PAGE_FB = READ_ONLY DATA_FAR IBCC_FAR 0xFB8000 TO 0xFBBFFF; PAGE_FC = READ_ONLY DATA_FAR IBCC_FAR 0xFC8000 TO 0xFCBFFF;ENDPLACEMENT_PRESTART,STARTUP,ROM_VAR,STRINGS,VIRTUAL_TABLE_SEGMENT,//.ostext,DEFAULT_ROM, NON_BANKED,COPYINTO ROM_C000 ;OTHER_ROM INTO PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;//.stackstart,SSTACK,//.stackend,PAGED_RAM,DEFAULT_RAMINTO RAM;DISTRIBUTE DISTRIBUTE_INTOROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;CONST_DISTRIBUTE DISTRIBUTE_INTOROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;DATA_DISTRIBUTE DISTRIBUTE_INTORAM;//.vectors INTO OSVECTORS;ENDENTRIES//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStartENDSTACKSIZE 0x100VECTOR 0 _Startup//VECTOR 0 Entry//INIT Entry1 .prm文件组成结构按所含的信息的不同.prm文件有六个组成部分构成,这里仅讨论和内存空间映射关系紧密的三个部分,其他的不做讨论。

飞思卡尔单片机 MC9S12 单片机应用系统开发平台下实时操作

飞思卡尔单片机 MC9S12 单片机应用系统开发平台下实时操作
But be necessary in this saying an once implanting dyadic system , its belonging to electron system , include the microprocessor or tiny controller, people does not look upon to implanting dyadic system as the same computer , they are computer in concealing or implanting in various system. Be used to control a field , be given consideration to data handling mainly. But tiny controller is MCU , fundamental MCU import, comparatively entire digital handling system going to integrated central authority treatment element (cpu) , memory (RAM/ROM waits) , timer/ counter and interface various IO (I/O) in chip a sheet of.
计算机方向嵌入式计算机应用正在计算机领域迅速崛起,虽然该技术还不很成熟,但是它 的应用已经深入到社会各个领域,像办公自动化、民用消费品、计算机外设、机器人和武 器系统等等。
嵌入式系统,属于电子系统,包括微处理器或微控制器,嵌入式系统不是一般的计算 机,是隐藏或嵌入在各种系统中的计算机。主要用于控制领域,兼顾数据处理。而微控制 器即 MCU,MCU 的基本含义,在一片芯片上集成了中央处理单元(cpu)、存储器(RAM/ROM 等)、 定时器/计数器及多种输入\输出(I/O)接口的比较完整的数字处理系统。

Freescale_MC9S12XS128程序总结

Freescale_MC9S12XS128程序总结

1.对IO口输入输出操作程序举例:A口接流水灯并实现闪烁void main(void) {while(1){DDRA=0xff;delay(500);PORTA=0xff;delay(500);PORTA=0;}另外,B、E口的IO功能操作也是一样的,因为位数一样寄存器一样,其他口的寄存器就不太一样了!J,P,M,T,S这五个口除具有数据寄存器外,他们都另外多出另一个端口输入寄存器(该寄存器功能我未知)!2.SPI总线接口SPI是一种高速高效的同步串行接口,这种接口主要用于MCU与外部的接口芯片交换数据,只要有SPI口的芯片都可以与单片机相连形成主从机系统进行数据的传递,比如SPI用于移位寄存器74HC164,这是个串入并出的芯片这样可以实现扩展IO口。

还有AD转换芯片AD7793,可以实现数模转换,还有飞思卡尔公司的电源管理芯片MC33389。

因设备有限此功能待以后调试!3.SCI总线接口MC9S12DG128单片机有两个SCI模块,可以选用其中任何一个。

他的使用有8个相应寄存器共设置,其中有波特率设置寄存器SCIBDH,SCIBDL,还有控制寄存器SCICR1,SCICR2,状态寄存器SCISR1,SCISR2,数据寄存器SCIDRH,SCIDRL;简单讲SCI的使用就是寄存器初始化,数据传送方式设置,下面举个初始化使用的简单例子:SCICR2=0x08;//发送使能设置SCIBDH=0x00;//波特率设置为9600SCIBDL=0x9c;就是这样这个是简单实用时的设置,发送函数如下:While(!(SCISR1&0x40))//检测是否发送完毕,一旦发送完毕就进入到死循环里边{}SCIDRL=C;//C代表需要传送的数据4.有关定时器TCNTTCNT是芯片内部的16位主定时器,他不停地对内部时钟信号进行计数,从0x0000直到0xffff,计满后溢出又返回到0x0000,程序随时可以读取,但在普通模式下禁止写入。

飞思卡尔s12单片机-用C语言开发应用程序

飞思卡尔s12单片机-用C语言开发应用程序

交叉编译:是指在一台大一些、 交叉编译:是指在一台大一些、
生目标系统的机器码。 生目标系统的机器码。目标系统 计算机的CPU类型完全不同。 类型完全不同。 计算机的 类型完全不同
第七章 用C语言开发应用程序 语言开发应用程序 —编辑、编译、链接、定位 编辑、编译、链接、
*.h *.c *.c++ C源文件 源文件 汇编源文件
2、避免使用浮点数和双精度 、 3、C语言数据类型的位宽取决于单片机的类型和具体的 语言数据类型的位宽取决于单片机的类型和具体的IDE中的约定; 中的约定; 、 语言数据类型的位宽取决于单片机的类型和具体的 中的约定 中工程窗口中的“ 标签下“ 如codewarrior中工程窗口中的“target”标签下“standard”对话框中 中工程窗口中的 标签下 对话框中 “complier for”中 “Type sizes”按钮对应的对话框 中 按钮对应的对话框 Page 6
Page 8
第七章 用C语言开发应用程序 语言开发应用程序 ———运行环境 运行环境
7.3 建立 语言程序运行环境 建立C语言程序运行环境
C语言的主程序从main()开始的,必须为main() 建立一个程序运行环境, 主要完成四件事情: 1、设置栈指针初值 2、相关硬件的系统初始化 3、调用函数main() 使之执行 4、给出main() 完成后的出口,即执行exit()。
*.asm *.inc
链接配 置文件
*.prm
C编译器 汇编编译器
列表文件
目标文件
*.obj
库文件
*.lst 反 编 译 器
链接器 *.sx 执行文件 *.abs
汇编 反编译文件
映射文件
*.map

飞思卡尔MC9S12C中文介绍以及简单编程编程

飞思卡尔MC9S12C中文介绍以及简单编程编程

C64 64K / 64k* 4K - 16MHz (25MHz option) 1 1 - 3-5V 31 - 60 1 8-ch 10-bit 48 / 52 / 80 C32 32K / 32K* 2K - 16MHz (25MHz option) 1 1 - 3-5V 31 - 60 1 8-ch 10-bit 48 / 52 / 80 GC32 32K 2K - 16MHz (25MHz option) 1 1 - 3-5V 31 - 60 0 8-ch 10-bit 48 / 52 / 80 GC16 16K 2K - 16MHz (25MHz option) 1 1 - 3-5V 31 - 60 0 8-ch 10-bit 48 / 52 / 80 TM Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. © Freescale Semiconductor, Inc. 2005. Slide 5 S12 C-系列更新… –市场表现出色,给人崭新印象的入门级 C-系列… –16 位的性能 8 位的价格 –弥补 S12 在$2.00 以下的缺憾 –3-5V 工作电压 – 封装从小型的 48 QFP (7x7mm) 到标准的 80 QFP (与 S12D & B 兼容) – 9S12C64/96/128 已经通过质量测试 –*ROM 系列 (所有 CAN 版本) 将使 S12 入门级更低 – ROM Production targeted for 3Q05 (all versions). Exact schedule TBD. – 不带 CAN 的 9S12GC16/32/64/128 量产,价格更低!与 C32/64/96 管脚兼容 应用范围: 车身控制,ABS,EPS,座椅控制,空调 TM Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. © Freescale Semiconductor, Inc. 2005. Slide 6 MC9S12Q 系列 Part No Flash ROM RAM CAN SCI SPI TIMER ADC PWM Package S12Q128 128k - 4k 1 1 1 6ch 16 bit 8ch 10bit 4 Ch 80, 52, 48 QFP S12Q96 96k - 3k 1 1 1 6ch 16 bit 8ch 10bit 4 Ch 80, 52, 48 QFP S12Q64 64k - 2k 1 1 1 6ch 16 bit 8ch 10bit - 52, 48 QFP S12Q32 32k - 1k 1 1 1 6ch 16 bit 8ch 10bit - 52, 48 QFP S12Q128 - 128k 4k 1 1 1 6ch 16 bit 8ch 10bit 4 Ch 80, 52, 48 QFP S12Q96 - 96k 3k 1 1 1 6ch 16 bit 8ch 10bit 4 Ch 80, 52, 48 QFP S12Q64 - 64k 2k 1 1 1 6ch 16 bit 8ch 10bit - 52, 48 QFP S12Q32 - 32k 1k 1 1 1 6ch 16 bit 8ch 10bit - 52, 48 QFP Q Family Q Family MCU’s MCU’s 特点/优点: •低成本 •基于 S12C-系列 •增强型 msCAN 12 •增强型 SCI 用于 LIN • SPI • 8 or 16 MHz Up to 4K RAM Up to 4K RAM Up to 128K Up to 128K FLASH/ROM FLASH/ROM

飞思卡尔S12系列寄存器和中断讲解

飞思卡尔S12系列寄存器和中断讲解

S12的输入/输入端口(I/O 口)I/O端口功能可设置为通用I/O 口、驱动、内部上拉/下拉、中断输入等功能。

设置I/O口工作方式的寄存器有:DDR、10、RDR、PE、IE 和 PS。

DDR :设定I/O 口的数据方向。

IO :设定输出电平的高低。

RDR :选择I/O 口的驱动能力。

PE:选择上拉/下拉。

IE:允许或禁止端口中断。

PS: 1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。

I/O端口设置1、A 口、B 口、E 口寄存器(1)数据方向寄存器 DDRA、DDRB、DDREDDRA、DDRB、DDRE均为8位寄存器,复位后其值均为 0。

当 DDRA=0、DDRB=0、 DDRE=0 时 A 口、B 口和 E 口均为输入口。

否则,A 口、B口、E 口为输出口。

当 DDRA、DDRB、DDRE的任何一位置1时,则该位对应的引脚被设置为输出。

例如,将A 口设置为输出口,则其 C语言程序的语句为:DDRA=0xff ;(2) A 口、B 口、E 口上拉控制寄存器PUCRPUCR 初:PUPKE —— ----- --------- -——RUPEE ——-————-——PUPBE PUR\EWrite: | | |PUCR为8位寄存器,复位后的值为 0。

当PUPAE、PUPBE、PUPEE被设置为1时,A 口、B 口、E 口具有内部上拉功能;为0时,上拉无效。

当A 口、 B 口、E 口为地址/数据总线时,PUPAE和PUPBE无效。

(3)A 口、B 口、E 口降功率驱动控制寄存器RDRIVRDRIV 篇眾?RDPK 口| | 良DPE 口口| 嵐DPB RDPARDRIV为8位寄存器,复位后的值为 0,此时,A 口、B 口、E 口驱动保持全功率;当 RDPA、RDPB、RDPE为1时,A 口、B 口、E 口输出引脚的驱动功率下降(4)数据寄存器PORTA、PORTB、PORTEPORTA、PORTB、PORTE均为8位寄存器,复位后的值为 0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。

freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)

freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)

PWM应用程序/*程序实现功能:PP1口输出PWM方波程序说明:通过改变duty和period ,从而控制PWM周期和占空比duty cycle=duty/periodPWM frequency=1M/(2*period)(Fbus=24M,scla=24)*/#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */void SetBusClock_24MHZ(void);void PWMDisable(byte channel);void PWMEnable(byte channel);void PWMSinglePortSetting(byte channel ,byte period ,byte duty) ;void PWMsinglePortInitial(byte channel, byte clkab,byte clock, byte polarity,byte align) ; void Service_WD(void);void PWMGeneralInitial(byte prclk,byte scla,byte sclb,byte ctl);void PWMConcatenateSetting(byte channel,word period,word duty);void main(void){/* put your own code here *///总线时钟频率设置:24MSetBusClock_24MHZ();//对预分频时钟,分频时钟A,分频时钟B和控制寄存器的配置//0分频01级联PWMGeneralInitial(0,24,0,0x10);//PWM端口寄存器的配置// 1通道SA时钟起始高电平左对齐PWMsinglePortInitial(1,0,1,1,0);//PWM级联输出配置//50HZ 占空比12.5%PWMConcatenateSetting(1,10000,250);//EnableInterrupts;for(;;) {_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}//*********************************************//函数名:PWMEnable//函数功能:PWM单个端口使能//函数参数:一个byte 类型channel 代表PWM通道号// 返回值:无//********************************************void PWMEnable(byte channel){if(channel>7) channel=7;PWME|=(1<<channel); //选择使能位}//**********************************************//函数名称:PWMDisable//函数功能:PWM单个端口禁止//函数参数:一个byte类型channel 代表PWM通道号//返回值:无//***********************************************void PWMDisable(byte channel){if(channel>7) channel=7;PWME&=~(1<<channel); //选择禁止位}//函数功能:启动看门狗void Service_WD(void){CPMUARMCOP=0x55;CPMUARMCOP=0xAA;}//函数功能:总线时钟设置void SetBusClock_24MHZ(void){CPMUOSC_OSCE=1; //enable osc/*时钟倍频:24MHz BusClock48MHz VCO48MHz PLL*/CPMUSYNR=0x00|0x05; //VCOFRQ[1:0],SYNDIV[5:0]CPMUREFDIV=0x20|0x03;//REFFRQ[1:0],REFDIV[3:0]CPMUPOSTDIV=0x00; //POSTDIV=0;while(!CPMUFLG_LOCK)//等待VCO稳定Service_WD(); //看门狗CPMUCLKS_PLLSEL=1;}//*********************************************//函数名称:PWMSinglePortSetting//函数功能:实现PWM周期寄存器和占空比寄存器通道的单独输出//函数参数:3个byte类型//参数1:channel代表了当前配置的PWM通道//参数2:period 周期配置参数/*Left aligned output (CAEx = 0) PWMx Period = Channel Clock Period * PWMPERxCenter Aligned Output (CAEx = 1) PWMx Period = Channel Clock Period * (2 * PWMPERx)*///参数3:duty 占空比配置参数/*Polarity = 0 (PPOL x =0) Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] * 100%Polarity = 1 (PPOLx = 1) Duty Cycle = [PWMDTYx / PWMPERx] * 100%*///返回值:无//**********************************************void PWMSinglePortSetting(byte channel ,byte period ,byte duty){if(channel>7) channel=7;PWMDisable(channel); //禁止该通道switch(channel){case 0:PWMPER0=period; //设置周期寄存器PWMDTY0=duty; //设置占空比寄存器break;case 1:PWMPER1=period; //设置周期寄存器PWMDTY1=duty; //设置占空比寄存器case 2:PWMPER2=period; //设置周期寄存器PWMDTY2=duty; //设置占空比寄存器break;case 3:PWMPER3=period; //设置周期寄存器PWMDTY3=duty; //设置占空比寄存器break;case 4:PWMPER4=period; //设置周期寄存器PWMDTY4=duty; //设置占空比寄存器break;case 5:PWMPER5=period; //设置周期寄存器PWMDTY5=duty; //设置占空比寄存器break;case 6:PWMPER6=period; //设置周期寄存器PWMDTY6=duty; //设置占空比寄存器break;case 7:PWMPER7=period; //设置周期寄存器PWMDTY7=duty; //设置占空比寄存器break;default:break;}PWMEnable(channel);}//*********************************************//函数名:PWMSinglePortInitial//函数功能:PWM端口寄存器的配置//函数参数:5个byte类型//参数1:channel 代表了当前配置的PWM通道//参数2:clkab 参数2,3决定了时钟源的选择//参数3: clock/*PWM Channel 0,1,4,5PCLKAB[0,1,4,5] PCLK[0,1,4,5] Clock Source Selection0 0 Clock A0 1 Clock SA1 0 Clock B1 1 Clock SBPWM Channel 2,3,6,7PCLKAB[2,3,6,7] PCLK[2,3,6,7] Clock Source Selection0 0 Clock B0 1 Clock SB1 0 Clock A1 1 Clock SA*///参数4:polarity PWM极性选择// 0 开始为低电平,周期计数开始为高电平// 1 开始为高电平,周期计数开始为低电平//参数5:align PWM对齐方式选择// 0 输出左对齐// 1 输出中心对齐//返回值:无//**********************************************void PWMsinglePortInitial(byte channel, byte clkab,byte clock, byte polarity,byte align) {if(channel>7) channel=7;//禁止该通道PWMDisable(channel);// PWM 时钟A/B 选择if(clkab==0) PWMCLKAB&=~(1<<channel);else PWMCLKAB|=(1<<channel);// PWM 时钟选择寄存器设置if(clock==0) PWMCLK&=~(1<<channel);else PWMCLK|=(1<<channel);//PWM 极性选择设置if(polarity==0) PWMPOL&=~(1<<channel) ;else PWMPOL|=(1<<channel);//PWM 对齐方式设置if(align==0) PWMCAE&=~(1<<channel);else PWMCAE|=(1<<channel);}//**********************************************************//函数名:PWMGeneralInitial//函数功能:对预分频时钟,分频时钟A,分频时钟B和控制寄存器的配置//函数参数:4个byte类型//参数1 prclk/*Clock A or Clock B Prescaler SelectsPCKA/B2 PCKA/B1 PCKA/B0 Value of Clock A/B0 0 0 Bus clock0 0 1 Bus clock / 20 1 0 Bus clock / 40 1 1 Bus clock / 81 0 0 Bus clock / 161 0 1 Bus clock / 321 1 0 Bus clock / 641 1 1 Bus clock / 128*///参数2:scla// Clock SA = Clock A / (2 * PWMSCLA)//参数3:sclb// Clock SB = Clock B / (2 * PWMSCLB)//参数4:ctl/*control[CON67,CON45,CON23,CON01,PSWAI,PFRZ]PWM级联控制寄存器CON67,CON45,CON23,CON010 单独一个通道1 两个通道级联PSWAI 0 等待模式禁止时钟输入1 等待模式允许时钟输入PFRZ 0 冻结模式允许PWM时钟输入1 冻结模式禁止PWM时钟输入//返回值:无*///**************************************************************void PWMGeneralInitial(byte prclk,byte scla,byte sclb,byte ctl){//禁止所有的PWM通道PWME=0x00;//设置预分频参数PWMPRCLK=prclk;//设置A分频参数PWMSCLA=scla;//设置B分频参数PWMSCLB=sclb;//级联配置PWMCTL=ctl;}//***********************************************************//函数名称:PWMConcatenateSetting//函数功能:PWM级联输出配置//函数参数:1个byte类型,2个word类型//参数1:channel代表了当前配置的PWM通道//参数2:period 周期配置参数/*Left aligned output (CAEx = 0) PWMx Period = Channel Clock Period * PWMPERxCenter Aligned Output (CAEx = 1) PWMx Period = Channel Clock Period * (2 * PWMPERx)*///参数3:duty 占空比配置参数/*Polarity = 0 (PPOL x =0) Duty Cycle = [(PWMPERx-PWMDTYx)/PWMPERx] * 100%Polarity = 1 (PPOLx = 1) Duty Cycle = [PWMDTYx / PWMPERx] * 100%*///返回值:无//**************************************************************void PWMConcatenateSetting(byte channel,word period,word duty){if(channel>7) channel=7;switch(channel){case 0:case 1:PWMDisable(0); //禁止通道0PWMDisable(1); //禁止通道1PWMPER01=period; //设置周期寄存器PWMDTY01=duty; //设置占空比寄存器PWMEnable(0); //使能通道0;PWMEnable(1); //使能通道1;break;case 2:case 3:PWMDisable(2); //禁止通道2PWMDisable(3); //禁止通道3PWMPER23=period; //设置周期寄存器PWMDTY23=duty; //设置占空比寄存器PWMEnable(2); //使能通道2;PWMEnable(3); //使能通道3;break;case 4:case 5:PWMDisable(4); //禁止通道4PWMDisable(5); //禁止通道5PWMPER45=period; //设置周期寄存器PWMDTY45=duty; //设置占空比寄存器PWMEnable(4); //使能通道4;PWMEnable(5); //使能通道5;break;case 6:case 7:PWMDisable(6); //禁止通道6PWMDisable(7); //禁止通道7PWMPER67=period; //设置周期寄存器PWMDTY67=duty; //设置占空比寄存器PWMEnable(6); //使能通道6;PWMEnable(7); //使能通道7;break;default:break;}}定时器应用程序#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */// 函数声明void OutputCompare_Init(void);;void Service_WD(void);void SetBusClock_24MHz(void);// 全局变量uint Timer7_Cnt=0;void main(void) {/* put your own code here */SetBusClock_24MHz();OutputCompare_Init();EnableInterrupts;for(;;) {_FEED_COP(); /* feeds the dog */} /* loop forever *//* please make sure that you never leave main */}void OutputCompare_Init(void){TSCR1_TEN = 0; /* Disable Timer module before adjusting registers. */ TIOS_IOS7 = 1; /* Set Channel 0 as output compare. */ TCTL1_OM7 = 0; /* Set channel 0 to toggle when a Timer match occurs. */ TCTL1_OL7 = 1; /* Set channel 0 to toggle when a Timer match occurs. */ TC7 = 0x4926; /* Set a value for channel 0 timer compare. */ TIE_C7I = 1; /* Enable channel 0 interrupt, handled by function TIM0ISR. */TSCR1_TSWAI = 1; /* Disables the timer module while in wait mode. */ TSCR1_TSFRZ = 1; /* Disables the timer counter while in freeze mode. */TSCR2_PR = 0x7; /* Set prescaler to divide by 128 */ TSCR2_TCRE = 1;TSCR1_TEN = 1; /* Timer Enable. *///中断周期:0x4926*128/24MHz = 100ms}#pragma CODE_SEG __NEAR_SEG NON_BANKEDvoid interrupt VectorNumber_Vtimch7 TIM7_ISR(void){Timer7_Cnt++;TFLG1 = TFLG1_C7F_MASK; /* Clear channel 0 flag. */}#pragma CODE_SEG DEFAULT// 看门狗void Service_WD(void){CPMUARMCOP = 0x55;CPMUARMCOP = 0xAA;}void SetBusClock_24MHz(void){CPMUOSC_OSCE = 1; /* enable ext osc *//*Initialise the system clock from a 16 MHz Crystal,24 MHz Bus CLK (48 MHz VCO, 48 MHz PLL)*/CPMUSYNR = 0x00 | 0x05; /* VCOFRQ[7:6], SYNDIV[5:0] */ CPMUREFDIV = 0x20 | 0x03; /* REFFRQ[7:6], REFDIV[3:0] */ CPMUPOSTDIV = 0x00; /* POSTDIV = 0 FPLL = FVCO */ while(!CPMUFLG_LOCK); /* wait for VCO to stabilize*/ Service_WD();CPMUCLKS_PLLSEL = 1; /* Switch clk to use PLL */}SCI应用程序#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */// 函数声明void SCI0_Init(void);void SCI0_BR(unsigned long br);void SCI0_SendByte(char ch);void Service_WD(void);void SetBusClock_24MHz(void);// 全局变量char SCI_Flag = 0;char SCI_Rev = 0;void main(void) {/* put your own code here */SetBusClock_24MHz();SCI0_BR(38400);SCI0_Init();EnableInterrupts;SCI0_SendByte(0x01);SCI0_SendByte(0x02);SCI0_SendByte(0x03);for(;;) {_FEED_COP(); /* feeds the dog */if(SCI_Flag==1) {SCI_Flag = 0;SCI0_SendByte(SCI_Rev);}} /* loop forever *//* please make sure that you never leave main */}void Service_WD(void){CPMUARMCOP = 0x55;CPMUARMCOP = 0xAA;}void SetBusClock_24MHz(void){CPMUOSC_OSCE = 1; /* enable ext osc *//*Initialise the system clock from a 16 MHz Crystal,24 MHz Bus CLK (48 MHz VCO, 48 MHz PLL)*/CPMUSYNR = 0x00 | 0x05; /* VCOFRQ[7:6], SYNDIV[5:0] */ CPMUREFDIV = 0x20 | 0x03; /* REFFRQ[7:6], REFDIV[3:0] */ CPMUPOSTDIV = 0x00; /* POSTDIV = 0 FPLL = FVCO */ while(!CPMUFLG_LOCK); /* wait for VCO to stabilize*/Service_WD();CPMUCLKS_PLLSEL = 1; /* Switch clk to use PLL */}//串口初始化void SCI0_Init(void){SCI0CR1 = 0x00; /* 8 Data Bits, 1 Start Bit, 1 Stop Bit, No Parity */SCI0CR2 = 0x2C; /* 使能接收中断;使能Tx,Rx *//* SCIASR1, SCIACR1, SCIACR2, SCISR1, SCISR2, SCIDRH & SCIDRL left at default values */ }//串口波特率设置void SCI0_BR(unsigned long br){uint brPrescaler;brPrescaler = (uint)(24000000 / (16 * br));/* Set the Baud Rate */SCI0BDH = (uchar)((brPrescaler>>8));SCI0BDL = (uchar)(brPrescaler);}//串口发送字节void SCI0_SendByte(char ch){/* check SCI transmit data register is empty */while(SCI0SR1_TDRE == 0);SCI0DRL = ch;}//串口中断#pragma CODE_SEG __NEAR_SEG NON_BANKEDvoid interrupt VectorNumber_Vsci0 SCI0_ISR(void){SCI0CR2_RIE=0;while(SCI0SR1_RDRF == 0);SCI_Rev = SCI0DRL;SCI_Flag = 1;SCI0CR2_RIE = 1;}#pragma CODE_SEG DEFAULTADC应用程序#include <hidef.h> /* common defines and macros */#include "derivative.h" /* derivative-specific definitions */// 函数声明void ADC_Init(void);uint ADC_GetValue(byte ch);void Service_WD(void);void SetBusClock_24MHz(void);void Delay(void);// 全局变量uint AD_Result;uint AD_Result2;void main(void) {/* put your own code here */SetBusClock_24MHz();ADC_Init();EnableInterrupts;for(;;) {_FEED_COP(); /* feeds the dog */AD_Result = ADC_GetValue(7);AD_Result2 = ADC_GetValue(0);} /* loop forever *//* please make sure that you never leave main */// AD初始化void ADC_Init(void){ATDCTL1 = 0x3F; /* 10-Bit resolution ,discharge before sampling. */ATDCTL3 = 0x88; /* Right Justified Data, Single conversion sequence */ATDCTL4 = 0xE1; /* 6 MHz, Notice: 12MHz Max ATD Clock, Fatdlk = FBUS/(2*(PRS+1)) *//* 26 ATD Clock cycles sample time */}// ADC通道采集uint ADC_GetValue(byte ch){ATDCTL5 = 0x0F & ch; /* Start Continuous Conversions on ch */while (!ATDSTAT0_SCF); /* wait for conversion sequence to complete */return ATDDR0;}// 看门狗void Service_WD(void){CPMUARMCOP = 0x55;CPMUARMCOP = 0xAA;}void SetBusClock_24MHz(void){CPMUOSC_OSCE = 1; /* enable ext osc *//*Initialise the system clock from a 16 MHz Crystal,24 MHz Bus CLK (48 MHz VCO, 48 MHz PLL)*/CPMUSYNR = 0x00 | 0x05; /* VCOFRQ[7:6], SYNDIV[5:0] */CPMUREFDIV = 0x20 | 0x03; /* REFFRQ[7:6], REFDIV[3:0] */CPMUPOSTDIV = 0x00; /* POSTDIV = 0 FPLL = FVCO */while(!CPMUFLG_LOCK); /* wait for VCO to stabilize*/ Service_WD();CPMUCLKS_PLLSEL = 1; /* Switch clk to use PLL */ }void Delay(void){uint dummy_ctr;for(dummy_ctr=0; dummy_ctr<0x007f;dummy_ctr++){;}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TM
10
How to change default behavior locally
Remember that any memory model allows accesses to banked code or data, It is only the default behavior that changes ! The keywords __far and __near specify the calling convention for functions. Far function calls can “cross” pages. Near function calls must stay in the same page. How to override the calling convention of a function ? using keywords __near and __far ! In the SMALL memory model, functions are near, data is near. In the BANKED memory model functions are far, data is near. In the LARGE memory model functions and data are far by default.
TM
8
Banked Memory Model
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
TM
12
Overriding default access to variables
__near and __far keywords can also be applied to variable declarations : char __near variable; A variable declared __near is considered by the compiler to be allocated in the zero page (first 256 bytes of the memory space, address range 0x00 – 0xFF) Accessing variables in the zero page generates less code and executes faster since the address used to access them is only one byte long.
TM
6
Comparison between memory models
Let’s compare the assembly instructions generated by the compiler with the following simple code:
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
A call to a banked function is more expensive both in codesize and execution time.
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
Advanced C programming for 16-bit MCUs
Austin, Texas 25-29 September, 2006
TM
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
1
Introduction
What is this training about ?
TM
Agenda
Memory
Models functions calls by hand
Optimizing Running Running
routines in RAM a function from the Stack
TM
3
Memory Models
Models! Where?
TM
What is a memory model ?
Memory Models
A memory model is a set of rules that changes the default behavior of the compiler. It tells the compiler what instructions to generate when accessing data and calling functions. The Compiler for the 16 bits MCU’s supports three different memory models.
TM
ቤተ መጻሕፍቲ ባይዱ13
__near and __far applied to variables or data
char __far variable; A variable declared __far is considered by the compiler to be allocated in a banked memory segment an has to be accessed through a page switch routine. (Like in the large memory model) In what scenarios would we have banked data ? The only banked internal memory resource is Flash (read-only). Therefore if using only internal resources, only constant data (read-only data) can be paged. The other scenario is where we have external RAM accessed through a paged area.
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
SMALL ( code and data fit in 64Kb )
Data and functions are accessed by default with 16 bit addresses.
BANKED (code in banked memory)
Data is also accessed with 16 bit addresses, functions are called using banked calls
TM
9
Large Memory Model
Freescale and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. Freescale Semiconductor, Inc. 2006.
TM
5
Memory Models
Differences when calling banked and non-banked functions
If a function is in banked memory, it has to be called differently than a function in non–banked memory. In particular:
相关文档
最新文档