Application Note AN_351 FT51A Compatibility Module Version 1.0 Issue Date: 2015-12-21 This document describes how to use FTDI’s UMFT51AA module as a replacement for a classic 40-pin DIP 8051-based microcontroller. Use of FTDI devices in life support and/or safety applications is entirely at the user’s risk, and the user agrees to defend, indemnify and hold FTDI harmless from any and all damages, claims, suits or expense resulting from such use. Future Technology Devices International Limited (FTDI) Unit 1, 2 Seaward Place, Glasgow G41 1HH, United Kingdom Tel.: +44 (0) 141 429 2777 Fax: + 44 (0) 141 429 2758 Web Site: http://ftdichip.com Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 Table of Contents 1 Introduction ........................................................... 2 2 Pin Configuration .................................................... 3 3 Special-Function Registers (SFRs) .......................... 4 3.1 Peripheral Access .............................................................5 4 Power consumption ................................................ 7 5 Program Security .................................................... 8 6 Compiler differences ............................................... 9 7 Interrupt Vectors .................................................. 10 8 Electrical characteristics ....................................... 11 9 Timer 2 ................................................................. 12 10 Clock frequency and timing................................... 13 11 Sample code ......................................................... 14 12 Initial firmware..................................................... 16 13 Contact Information ............................................. 17 Appendix A – References ............................................. 18 Document References ............................................................... 18 Acronyms and Abbreviations..................................................... 18 Appendix B – List of Tables & Figures .......................... 19 List of Figures ........................................................................... 19 Appendix C – Revision History ..................................... 20 Product Page Document Feedback 1 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 1 Clearance No.: FTDI# 482 Introduction Since Intel discontinued its 80C51, many other manufacturers have released their own 8051compatible microcontrollers in the same 40-pin dual-inline package, with a matching pin configuration. Examples include the Philips P80C51, the Atmel 89S8253 and the Maxim DS80C320. FTDI’s UMFT51AA module (a small circuit board featuring an enhanced 8051compatible microcontroller, the FT51A) is pin-compatible – and generally code-compatible – with such chips. This document compares features of the FT51A with such chips, and describes any changes which might be required to make existing firmware run correctly on the FT51A. Product Page Document Feedback 2 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 2 Clearance No.: FTDI# 482 Pin Configuration The FT51A’s Input-Output Multiplexer (IOMUX) allows you to map any signal to any pin, but as shown in Figure 1, the default mapping routes the UMFT51AA’s Input-Output ports to the same pins as the classic 8051 and its derivatives. P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 RST (RxD) P3.0 (TxD) P3.1 (INT 0) P3.2 (INT 1) P3.3 (T0) P3.4 (T1) P3.5 P3.6 P3.7 XTAL2 XTAL1 GND Classic 8051 derivative. VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 EA/VPP ALE/PROG PSEN P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 RST P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 NC NC GND UMFT51AA VCC P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 NC NC NC P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 Figure 1: UMFT51AA pin-out matches the classic 8051. Connections shown in red are unavailable or unnecessary. Other 8051 compatible devices typically add alternative functionality to some of the pins: for example, Port 0 often doubles as a combined address/data bus for external memory, and pins on Port 3 receive and transmit serial data. The FT51A’s versatility allows the UMFT51AA to be configured similarly, with the following exceptions. The FT51A has 8 kB of ‘external’ data RAM and 16 kB of program memory built-in, so doesn’t need an address/data bus; pins for associated signals (such as ALE or PROG) are not connected to anything on the FT51A. The UMFT51AA is typically programmed through a dedicated connector, or with the USB Device Firmware Upgrade (DFU) standard. The FT51A uses interrupts 0 and 1 for its extended range of on-chip peripherals (enhanced UART, SPI Master and Slave etc.) so pins 2 and 3 of Port 3 are not available as external interrupt sources. The FT51A does not support counting external events on timers 0 and 1 so pins 3 and 4 of Port 3 cannot be used for this purpose. The FT51A has its own internal clock so there is no need to connect a crystal. Since the FT51A can route any signal to any pin, to get RxD and TxD on pins 2 and 3 of Port 3, this must be explicitly specified in software. Product Page Document Feedback 3 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 3 Clearance No.: FTDI# 482 Special-Function Registers (SFRs) Like the 8051 and its derivatives, the FT51A has an area of RAM with registers to control the core and the on-chip peripherals. The FT51A has standard 8051 SFRs in the traditional locations (shown in green), plus extra SFRs to directly control the I2C Master, I2C Slave and USB Slave. All other on-chip peripherals are controlled indirectly through ten configurable channels, each comprising three SFRs (see section 3.1). +0 +1 +2 +3 +4 80 P0 SP DPL0 DPH0 88 TCON TMOD TL0 TL1 90 P1 EIF 98 SCON0 SBUF0 IO_ADDR_0_H IO_ADDR_0_L A0 P2 A8 IE IO_ADDR_2_H IO_ADDR_2_L IO_DATA_2 B0 P3 IO_ADDR_3_H IO_ADDR_3_L IO_DATA_3 B8 IP IO_ADDR_4_H IO_ADDR_4_L IO_DATA_4 C0 C8 T2CON T2IF RCAP2L RCAP2H D0 PSW IO_ADDR_5_H IO_ADDR_5_L IO_DATA_5 IO_ADDR_6_H IO_ADDR_6_L IO_DATA_6 IO_ADDR_7_L IO_DATA_7 D8 E0 ACC IO_ADDR_7_H E8 EIE STATUS +5 +6 +7 DPL1 DPH1 DPS TH0 TH1 CKCON IO_DATA_0 IO_ADDR_1_H IO_ADDR_1_H TL2 TH2 PCON IO_DATA_9 IO_DATA_1 F0 B I2CSOA I2CSCR I2CSBUF I2CMSA I2CMCR I2CMBUF I2CMTP F8 EIP IO_ADDR_8_H IO_ADDR_8_L IO_DATA_8 FT122_CMD FT122_DATA IO_ADDR_9_H IO_ADDR_9_L Standard 8051 register Register to control an enhancement which may be found on other 8051 derivatives Register to control directly an FT51A-specific peripheral Register to control indirectly an FT51A-specific peripheral As well as the standard peripherals, the FT51A has some of the features of enhanced 8051 derivatives such as a third timer (registers C8 to CD) and a second data pointer (registers 84 to 86). The following table compares some of the relevant registers with those found on the Atmel AT89S8253. Product Page Document Feedback 4 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Register address 0x86 0x8E FT51A name and function AT89S8253 name and function DPS CKCON SPDR AUXR Select active data pointer Modify tick duration for timer 0, 1 or 2. Not used 0x8F 0x91 Clearance No.: FTDI# 482 EIF Extended interrupt flags for I2C Master and Slave Not used 0x96 0xC9 0xE8 T2IF EIE 0xE9 STATUS 0xF8 EIP Timer 2 interrupt flags Extended interrupt enable for I2C Master and Slave Allows firmware to check if safe to enter low-power mode Extended interrupt priority for I2C Master and Slave CLKREG EECON T2MOD SPI data ALE and Power-down configuration External crystal clock generation Not used EEPROM control, and selection of active data pointer Timer 2 mode Not used Not used Not used 3.1 Peripheral Access The table of SFRs refers to direct and indirect access to on-chip peripherals. Timer’s 0–2, the basic UART, the I2C and the FT122 compatible USB module are all controlled by dedicated SFRs, accessed directly in code as shown in these examples. TMOD TMOD TCON TCON &= |= &= |= 0xF0; 0x01; 0xCF; 0x10; // // // // Clear Timer0 bits Put Timer0 in mode 1 (16 bit) Clear Timer0's Overflow and Run flags Start Timer0 (set its Run flag) SCON &= ~TX_COMPLETE; // Clear UART transmit-complete flag SBUF = c; // Put byte into transmit buffer while (!(SCON & TX_COMPLETE)); // Wait for all bits to be sent FT122_CMD = SELECT_ENDPOINT + 0; // Select USB endpoint 0 if (FT122_DATA & SELECT_BUFFER_FULL) // Endpoint status appears in FT122_DATA . . . I2CMBUF = data; // Prepare to send byte from I2C Master I2CMCR = I2C_FLAGS_RUN; // Start sending byte do { status = I2CMCR; } while (status & I2C_STATUS_BUSY); // Wait until byte sent All other peripherals (such as Timers A–D, SPI and ADC) are accessed indirectly using one of the ten Input-Output channels, each consisting of a 16-bit address (split into high and low bytes, e.g. IO_ADDR_0_H and IO_ADDR_0_L) and 8 bits of read/write data (e.g. IO_DATA_0). This allows firmware to map up to ten more peripheral control registers into the SFR space at any time. The following example maps three SPI Master Registers into channels 5, 6 and 7. Product Page Document Feedback 5 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 void SPIM_transceive(uint8_t *src, uint8_t *dest, uint16_t length) { // Map SPI Master Transmit Buffer register to IO Channel 5 IO_ADDR_5_H = MSB(SPI_MASTER_TX_DATA); IO_ADDR_5_L = LSB(SPI_MASTER_TX_DATA); // Map SPI Master Receive Buffer register to IO Channel 6 IO_ADDR_6_H = MSB(SPI_MASTER_RX_DATA); IO_ADDR_6_L = LSB(SPI_MASTER_RX_DATA); // Map SPI Master Interrupt Flags register to IO Channel 7 IO_ADDR_7_H = MSB(SPI_MASTER_INT); IO_ADDR_7_L = LSB(SPI_MASTER_INT); while (length) { IO_DATA_7 = 0; // Clear interrupt flags IO_DATA_5 = *src++; // Send one byte while (!(IO_DATA_7 & MASK_SPI_TX_DONE)); // Wait for byte to be sent IO_DATA_6 = *dest++; // Store the received byte length--; } } By saving and restoring the IO address SFRs (or assigning them for every read and write), firmware may map more than ten peripheral-control registers. FTDI provide macros (similar to the one shown below) for this latter approach, dedicating one channel for general access and a second channel for access at interrupt level. #define IO_REG_GENERAL_WRITE(address, data) do { IO_ADDR_0_H = (uint16_t)(address) >> 8; IO_ADDR_0_L = (uint8_t)(address); IO_DATA_0 = (data); } while (0) \ \ \ \ \ \ \ . . . IO_REG_GENERAL_WRITE(SPI_MASTER_TX_DATA, *src++); See lib\inc\ft51_io_registers.h in the FT51A Software Development Kit for macros to read and write a byte, write a word, and set or clear bits. Product Page Document Feedback 6 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 4 Clearance No.: FTDI# 482 Power consumption The FT51A supports the original 8051’s two low-power modes as follows. Mode Initiated by: Terminated by: Idle Software Interrupt or hardware reset Software Hardware reset Power Down On-chip peripherals active? Yes On-chip RAM retained? SFRs retained? Equivalent FT51A mode Yes Yes No Yes No Power Management. Divides system clock by 256. If switchback enabled (bit 2 of PCON), returns to full speed when certain peripherals interrupt, or serial bit received. Stop. Stops system clock Other 8051 derivatives (such as the Maxim DS80C320) can be woken from Power-Down mode by an external interrupt. The FT51A does not support direct external interrupts but external devices connected to on-chip peripherals can generate interrupts. Also, the FT51A’s on-chip USB function can support Suspend, Resume and Remote Wakeup. Product Page Document Feedback 7 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 5 Clearance No.: FTDI# 482 Program Security The original 8051 has a feature to lock or encrypt program memory, to protect intellectual property. The FT51A does not support encryption but the internal MTP program memory may be protected from reads or writes using the security settings register TOP_SECURITY_LEVEL. // Lock FT51A device to prevent read or write access to the MTP IO_REG_GENERAL_WRITE(TOP_SECURITY_LEVEL, MASK_SECURITY_LEVEL); This is covered in more detail in AN_289_FT51A_Programming_Guide.pdf, available in the application notes directory of the FT51A SDK, or from http://www.ftdichip.com. Product Page Document Feedback 8 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 6 Clearance No.: FTDI# 482 Compiler differences Currently, FTDI supports only the SDCC tool chain. Other compilers, e.g. MikroC, Keil, use different C language extensions for SFR and sbit declarations, and for annotating ISRs, as shown in the following table. Keil SDCC void timer0_ISR(void) interrupt 1 sfr P0 = 0x80; sbit P0_0 = 0x80; sbit P0_2 = P0^2; unsigned char xdata my_var; void timer0_ISR(void) __interrupt (1) __sfr __at (0x80) P0; __sbit __at (0x80) P0_0; Not supported. Use numeric form. __xdata unsigned char my_var; See the SDCC documentation (http://sdcc.sourceforge.net/doc/sdccman.pdf) for a full list of C extensions. Product Page Document Feedback 9 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 7 Clearance No.: FTDI# 482 Interrupt Vectors The FT51A contains an 8051-compatible core with the usual peripherals (timers etc.) plus some enhanced peripherals. These extra peripherals occupy the interrupts that are normally reserved for ‘external’ signals. Interrupt number 0 1 2 3 4 5 13 14 FT51A Interrupt DMA Timer 0 SPI, Extended UART, etc. Timer 1 Serial port (basic) Timer 2 I2C Master I2C Slave AT89S8253 interrupt External 0 Timer/Counter 0 External 1 Timer/Counter 1 Serial port, SPI Timer 2 The FT51A’s Watchdog timer does not generate an interrupt. processor but sets a flag which start-up code can detect. Instead, it directly resets the #include "ft51_io_registers.h" #include "registers/ft51_timer_registers.h" . . . uint8_t data; . . . IO_REG_GENERAL_READ(TIMER_CONTROL_2, data); if (data & MASK_WDG_INT) { // This is a restart after a watchdog reset. } else { // This is a normal restart. } Product Page Document Feedback 10 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 8 Clearance No.: FTDI# 482 Electrical characteristics Many traditional 8051 derivatives have GPIO ports which operate with a range of 0 to 5V. The FT51A analog-capable IO ports (0 and 2) can tolerate inputs up to 5V, but the digital-only ports (1 and 3) can only tolerate inputs up to 3.3V. No FT51A pad (analog or digital) can drive out 5V: the maximum is 3.3V. The FT51A will be damaged if these restrictions are not followed. Product Page Document Feedback 11 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 9 Clearance No.: FTDI# 482 Timer 2 In addition to the 8051’s Timer 0 and Timer 1, the 8052 offered a third timer, Timer 2. The FT51A also offers this third timer, like many of the 8051 derivatives. Its operation is similar to the other 8051 timers, with the following differences. There is no mode-selection register; the mode is 16-bit auto-reload. The interrupt flag is not automatically cleared when the ISR is executed; it must be cleared explicitly by software. There is a pre-scale option to make the timer count at half-speed. Here is an example program to toggle an IO pin using Timer 2 with its maximum interval (counting from 0 to 65535 at half speed). void main(void) { P2_0 = 1; // Start with LED off T2CON = 0; // Initialise Timer2 // Maximum (65536) count-up before overflow. RCAP2H = 0; RCAP2L = 0; T2_PRESCALE = 1; // Timer ticks at half-speed. T2_RUN = 1; // Start Timer2 for ( ; ; ) // Infinite loop { if (T2IF & T2_OVERFLOW) { P2_0 = !P2_0; // Toggle bit 0 of Port 2 T2IF &= ~T2_OVERFLOW; // clear interrupt flag } } } The definitions for the above program are as follows. __sbit __at (0xA0) P2_0; __sfr __sfr __sfr __sfr __at __at __at __at (0xC8) (0xC9) (0xCA) (0xCB) // Bit 0 of Port 2 T2CON; // Timer 2 control register T2IF; // Timer 2 interrupt flags RCAP2L; // Timer 2 initial value (low byte) RCAP2H; // Timer 2 initial value (high byte) __sbit __at (0xC8) T2_RUN; // 1: running; 0: not running __sbit __at (0xCF) T2_PRESCALE; // 1: tick = clock/24; 0: tick = clock/12 #define T2_OVERFLOW 1 // Bit 0 of T2IF indicates overflow Product Page Document Feedback 12 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 10 Clock frequency and timing The FT51A can operate at 12, 24 or 48 MHz. Since 48 MHz is the default and is typically faster than other 8051 derivatives, existing code may need to be altered. Also, the FT51A core executes most instructions in a single clock period, rather than a traditional 8051’s machine cycle which was 12 clock periods. Any delay implemented as a C empty loop will need to be recalibrated for the FT51A and for the SDCC compiler. For example, for (i = 0; i < 45678; i++) { // Do nothing } might become: for (i = 0; i < 1234; i++) { // Do nothing } The same applies to a delay implemented in assembly. For example, the following code toggles a GPIO line every millisecond on an FT51A at 48 MHz, but every 37 milliseconds on an AT89S8253 at 10 MHz. __sbit __at (0xA0) P2_0; void main(void) { for ( ; ; ) { __asm mov 00001$: mov 00002$: nop nop djnz djnz cpl __endasm; } } // Bit 0 of Port 2 // Infinite loop r0, #31 ; // Outer loop iterations r1, #249 ; // Inner loop iterations r1, 00002$ r0, 00001$ _P2_0 ; // Toggle bit 0 of Port 2 For compatibility with existing designs, Timers 0, 1 and 2 do ‘tick’ every 12 clock periods, so the formula to convert microseconds to timer ticks is: 𝑡𝑖𝑚𝑒𝑟 𝑡𝑖𝑐𝑘𝑠 = 𝑡𝑖𝑚𝑒 (𝜇𝑠) × 𝑐𝑙𝑜𝑐𝑘 𝑓𝑟𝑒𝑞𝑢𝑒𝑛𝑐𝑦 (𝑀𝐻𝑧) 12 This formula applies to the FT51A as well as the 8051 and its derivatives, so carefully-written timer code might not need to be changed. For an example, see Section 11. Product Page Document Feedback 13 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 11 Sample code FTDI have ran this sample on both an Atmel AT89S8253 and a UMFT51AA module, connected to the mikroBoard for 8051 40-pin daughtercard hosted on the UNI-DS6 Development Board by MikroElektronika. This sample toggles bit 0 of Port 2 every second. On the UNI-DS6, this bit is connected to the LED for RC0. The full source code for this application is in examples\AN_351_FT51A_Compatibility_Module of the FT51A SDK. To compile and program the UMFT51AA: sdcc -D__FT51 second-toggle.c ft51prg.exe second-toggle.ihx To compile and program the Atmel AT89S8253: sdcc second-toggle.c 8051Flash.exe -w -pAT89S8253 -q -f "second-toggle.ihx" Note that the UMFT51AA is programmed with (and powered by) an FTPD-1 module connected to CN3 on the UMFT51AA. The AT89S8253 is programmed with (and powered by) a USB cable connected to CN3 on the mikroBoard. The program begins by defining macros used later. // Helper macro to get most-significant byte of a 2-byte variable. #ifndef MSB #define MSB(x) (unsigned char)(((unsigned int)(x) >> 8) & 0x00ff) #endif // MSB // Helper macro to get least-significant byte of a 2-byte variable. #ifndef LSB #define LSB(x) (unsigned char)((unsigned int)(x) & 0x00ff) #endif // LSB #ifdef __FT51 // Default clock frequency for FT51 is 48 MHz #define CLK_FREQ_MHZ 48 #else // Atmel mikroBoard has 10 MHz clock #define CLK_FREQ_MHZ 10 #endif // __FT51 // Compute timer starting value for given number of microseconds. // Scale is clock frequency in MHz / clock-cycles per timer tick (12). // 16-bit timer counts up to 65536, so subtract duration from 65536. #define TIMER_START_VALUE(us) \ (unsigned int)(65536UL - (unsigned long)(us) * CLK_FREQ_MHZ / 12 ) Also, the program defines Special Function Registers and bit-addressable variables. __sbit __at (0xA0) P2_0; // Bit 0 of Port 2 __sbit __at (0xB0) P3_0; // Bit 0 of Port 3 __sbit __at (0xA9) ET0; // Timer 0 interrupt-enable __sbit __at (0xAF) EA; // Master interrupt-enable __sfr __sfr __sfr __sfr __sfr __at __at __at __at __at (0x88) (0x89) (0x8A) (0x8C) (0xA8) Product Page Document Feedback TCON; // Timer Control TMOD; // Timer Mode TL0; // Timer start value (low byte) TH0; // Timer start value (high byte) IE; // Interrupt Enable 14 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 The ISR (interrupt service routine) for Timer 0 increments a global variable and reloads the timer with a value which will take 10 milliseconds to overflow. Note that there is no need to clear Timer 0’s Overflow flag; this happens automatically when the ISR is executed. volatile unsigned char interrupt_counter = 0; // Interrupt Service Routine to be run every 10 milliseconds. void Timer0_ISR(void) __interrupt (1) { interrupt_counter++; // Reload the 10 ms timer TH0 = MSB(TIMER_START_VALUE(10000)); TL0 = LSB(TIMER_START_VALUE(10000)); } The main function configures Timer 0 to interrupt every 10 milliseconds, then enters an infinite loop which toggles bit 0 of Port 2 every 100 interrupts (every second). Note that the timer interrupt is disabled while accessing the global variable interrupt_counter, which might otherwise be altered by the ISR. void main(void) { EA = 1; // Enable interrupts in general ET0 = 1; // Enable interrupt specifically for Timer0 P2_0 = 1; // Start with LED off // Timer0 is controlled by TMOD bits 0 to 3, and TCON bits 4 to 5. TMOD &= 0xF0; // Clear Timer0 bits TMOD |= 0x01; // Put Timer0 in mode 1 (16 bit) // Set the count-up value so that it will roll over to zero // after 10000 microseconds (one hundred times per second). TH0 = MSB(TIMER_START_VALUE(10000)); TL0 = LSB(TIMER_START_VALUE(10000)); TCON &= 0xCF; // Clear Timer0's Overflow and Run flags TCON |= 0x10; // Start Timer0 (set its Run flag) for ( ; ; ) { // Endless loop, interrupted periodically by Timer0_ISR ET0 = 0; // Disable timer 0 interrupt while we access counter if (interrupt_counter >= 100) { interrupt_counter = 0; // 100 x 10 ms == 1 second, so toggle bit 0 of Port 2 P2_0 = !P2_0; } ET0 = 1; // Re-enable timer 0 interrupt } } Product Page Document Feedback 15 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 12 Initial firmware FTDI ships the UMFT51AA module with a firmware which is essentially inert except for DFU (Device Firmware Upgrade) capabilities. This means that the firmware may be upgraded by connecting the module to a host PC’s USB port and running a suitable application on the host. This topic is covered in more detail in AN_344_FT51A_DFU_Sample.pdf in the FT51A SDK’s application notes directory. To help verify at a very basic level that the module functions correctly, FTDI provides another firmware which is the same as the initial firmware but toggles P3.0 periodically. An LED connected to this pin should blink every half-second. This extra firmware is blink_dfu.ihx in the examples\AN_351_FT51A_Compatibility_Module directory. The command to load it onto the module is: ft51dfu blink_dfu.ihx Note that the procedure in AN_344_FT51A_DFU_Sample.pdf must be followed first to install the suitable DFU drivers. Product Page Document Feedback 16 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 13 Contact Information Head Office – Glasgow, UK Branch Office – Tigard, USA Future Technology Devices International Limited Unit 1, 2 Seaward Place, Centurion Business Park Glasgow G41 1HH United Kingdom Tel: +44 (0) 141 429 2777 Fax: +44 (0) 141 429 2758 Future Technology Devices International Limited (USA) 7130 SW Fir Loop, Tigard, OR 97223 USA Tel: +1 (503) 547 0988 Fax: +1 (503) 547 0987 E-mail (Sales) E-mail (Support) E-mail (General Enquiries) [email protected] [email protected] [email protected] E-Mail (Sales) E-Mail (Support) E-Mail (General Enquiries) [email protected] [email protected] [email protected] Branch Office – Taipei, Taiwan Branch Office – Shanghai, China Future Technology Devices International Limited (Taiwan) 2F, No. 516, Sec. 1, NeiHu Road Taipei 114 Taiwan , R.O.C. Tel: +886 (0) 2 8791 3570 Fax: +886 (0) 2 8791 3576 Future Technology Devices International Limited (China) Room 1103, No. 666 West Huaihai Road, 200052 Shanghai, P.R. China Tel: +86 21 62351596 Fax: +86 21 62351595 E-mail (Sales) E-mail (Support) E-mail (General Enquiries) [email protected] [email protected] [email protected] E-mail (Sales) E-mail (Support) E-mail (General Enquiries) [email protected] [email protected] [email protected] Web Site http://ftdichip.com Distributor and Sales Representatives Please visit the Sales Network page of the FTDI Web site for the contact details of our distributor(s) and sales representative(s) in your country. System and equipment manufacturers and designers are responsible to ensure that their systems, and any Future Technology Devices International Ltd (FTDI) devices incorporated in their systems, meet all applicable safety, regulatory and system-level performance requirements. All application-related information in this document (including application descriptions, suggested FTDI devices and other materials) is provided for reference only. While FTDI has taken care to assure it is accurate, this information is subject to customer confirmation, and FTDI disclaims all liability for system designs and for any applications assistance provided by FTDI. Use of FTDI devices in life support and/or safety applications is entirely at the user’s risk, and the user agrees to defend, indemnify and hold FTDI harmless from any and all damages, claims, suits or expense resulting from such use. This document is subject to change without notice. No freedom to use patents or other intellectual property rights is implied by the publication of this document. Neither the whole nor any part of the information contained in, or the product described in this document, may be adapted or reproduced in any material or electronic form without the prior written consent of the copyright holder. Future Technology Devices International Ltd, Unit 1, 2 Seaward Place, Centurion Business Park, Glasgow G41 1HH, United Kingdom. Scotland Registered Company Number: SC136640 Product Page Document Feedback 17 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 Appendix A – References Document References [1] FT51A Programmer’s Manual http://www.ftdichip.com/Products/ICs/FT51.html [2] FT51A Software Development Kit http://www.ftdichip.com/Firmware/FT51ARegistration.htm [3] AN_344 FT51A DFU Sample http://www.ftdichip.com/Support/Documents/AppNotes/AN_344_FT51A_DFU_Sample.pdf Acronyms and Abbreviations Terms Description ADC Analog-to-Digital Converter DFU Device Firmware Upgrade GPIO General-Purpose Input-Output I2C Inter-Integrated Circuit IOMUX Input-Output Multiplexer ISR Interrupt Service Routine MTP Multiple-Time Programmable SDCC Small Device C Compiler SFR Special Function Register SPI Serial Peripheral Interface UART USB Product Page Document Feedback Universal Asynchronous Receiver/Transmitter Universal Serial Bus 18 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 Appendix B – List of Tables & Figures List of Figures Figure 1: UMFT51AA pin-out matches the classic 8051. ........................................................... 3 Product Page Document Feedback 19 Copyright © 2015 Future Technology Devices International Limited Application Note AN_351 FT51A Compatibility Module Version 1.0 Document Reference No.: FT_001133 Clearance No.: FTDI# 482 Appendix C – Revision History Document Title: AN_351 FT51 Compatibility Module Document Reference No.: FT_001133 Clearance No.: FTDI# 482 Product Page: http://www.ftdichip.com/Products/ICs/FT51.html Document Feedback: Send Feedback Revision 1.0 Product Page Document Feedback Changes First Release Date 2015-12-21 20 Copyright © 2015 Future Technology Devices International Limited