[INTEL NAVIGATION HEADER]

Runtime Programming on the 8XC196KR

ABSTRACT:

Corrects the Runtime programming example shown in the 8XC196KR Users Manual (270952-001).

RUNTIME PROGRAMMING EXAMPLE CORRECTION

The Runtime programming example in the 8XC196KR User's Manual (#270952-001) is incorrect. Figure 17.5 on page 17-13 shows how to program the 8XC196KR using an example copied from the 8XC196KC User's Manual. This example uses the HSIO peripheral which exists on the 8XC196KC but not on the 8XC196KR. The example shown in the users manual will not work on the 8XC196KR. The following code example uses the EPA peripheral and works on the 8XC196KR:

;************************************************************************************
;* This routine will program a table of data words into the internal EPROM. EPA0 is used to generate a
;* 100uS programming pulse. The EA# pin must be high at reset to allow access to the internal EPROM. 
;* Also, Vpp must be at +12.5V during execution of this routine to program the internal EPROM.
;************************************************************************************
 ;* The following variables (words) must be declared in the user program:
 ;* ADDRESS_TEMP 
 ;* DATA_TEMP 
 ;* COUNT 
 ;* TEMP0 
 ;* TEMP1 
 ;* TEMP2 
 ;* FLAG 
 ;* 
 ;* The following constants must be defined in the user program: 
 ;* EPA0_TIMER = 01000000B (EPA control) 
 ;* FREE_RUN = 11000000B (Timer control) 
 ;* ENABLE_EPA0 = 10H (EPA0 interrupt enable mask) 
 ;* DISABLE_EPA0 = 0EFH (clear EPA0 interrupt pending mask
 ;* PROG_SOURCE = (memory location of table that contains the data to be programmed starts) 
 ;* PROGRAM_PULSE = (number that will equal 100uS when the timer is using an internal clock 
 ;* with no prescaler) 
 ;* 
 ;* The format of the table containing the data to be programmed is: 
 ;* word 1 = address of EPROM location to be programmed 
 ;* word 2 = number of words to program 
 ;* word 3 = start of data to be programmed 
 ;**********************************************************************************
 ;**********************************************************************************
 ;* EPA0_ISR can reside in internal or external memory space. However, the EPA0_ISR vector must be
 ;*programmed at location 2008H in internal EPROM before this routine can be used. 
 ;**********************************************************************************
 EPA0_ISR:
 Clr flag
 Ret
 ;***********************************************************************************
;* This section of the program starts Timer1 and loads the data and address to be programmed. The 
;* starting address to be programmed is at PROG_SOURCE, the number of words to be programmed is at
 ;* (PROG_SOURCE + 2) and the data to be programmed starts at (PROG_SOURCE + 4). temp1 stores
;* the current external source address and temp2 to stores the current count.
;************************************************************************************
 START:
 Ldb wsr,#7CH
 Ld W1_T1CONTROL,#Free_run ;start timer1
 Clrb wsr
 Ld temp1,#PROG_SOURCE ;start of external data
 Ld address_temp,[temp1]
 Inc temp1
 Inc temp1
 Ld temp2,[temp1] ;number of words to program
 DATA_PROGRAM_LOOP:
 Inc temp1
 Inc temp1
 Ld data_temp,[temp1]
 Call program
 Inc address_temp
 Inc address_temp ;point to next address to program
 Djnzw temp2,data_program_loop
 Sjmp $ ;Finished programming
;**********************************************************************************
;* This routine programs the EPROM using the run-time programming mode 
;**********************************************************************************
;* The user calls this routine with the data to be programmed in data_temp and the address in 
;* address_temp. The routine then programs each word 25 times. For Runtime programming to function 
;* properly, the device cannot be accessing internal EPROM. Placing the device in idle mode or executing 
;* out of external memory accomplishes this. While programming each word, the device remains in a 
;* waiting loop until a flag is cleared. This requires that the wait loop is located in external memory. 
;* EPA0 is used to end the waiting loop at the appropriate time. 
;***********************************************************************************
;* This routine assumes: 
;* EPA0 devoted to run-time programming only, Timer1 previously setup as free-running timer using 
;* internal clock (Timer1 used with EPA0 to generate programming pulse width). EPA0_ISR assigned 
;* as EPA0 interrupt vector 
;***********************************************************************************
 PROGRAM:
 Pusha
 Ldb WSR,#7BH ;Select 32-byte window with EPA0
 Ld count,#25 ;Number of times to pulse location
 Andb INT_PEND,#DISABLE_EPA0 ;clear EPA0 pending bit if set
 Ldb INT_MASK,#ENABLE_EPA0 ;EPA0 interrupt enabled
 Ldb INT_MASK1,ZERO_REG ;Clear INT_MASK1 
 Ldb W1_EPA0_CON,#EPA0_TIMER ;EPA0 set up as timer 
 QPP_LOOP:
 Ld temp0,TIMER1
 Add W1_EPA0_TIME,temp0,#PROGRAM_PULSE 
 ;Program pulse width
 Ei
 St data_temp,[address_temp] ;user has stored data in data_temp and address in
 ;address_temp before calling program routine
 Ld flag,#5555H ;init flag to not zero
 ;********************************************************************************
 ;* The following routine must be located in external memory 
 ;********************************************************************************
 PROG_WAIT_LOOP: 
 Subb flag,zero_reg
 Jne prog_wait_loop ;loop until timer interrupt
 Djnz count,qpp_loop ;Loop 24 times
 Popa
 Ret
 end
The user should note that:
1) This program does no verification check
2) The numbers are optimized for 16MHz operation
3) Windowed addresses for some of the SFRs are used
4) The block of data to be programmed is sequential

An example of the table used is:

 CSEG
 PROG_SOURCE:
 DCW 3000H,0005H,1111H,2222H,3333H,4444H,5555H

This would program 5 words starting at EPROM location 3000H.
1111H is the first word programmed.



Legal Stuff © 1997 Intel Corporation

Free Web Hosting