Hallo Freunde,
Beim Beschreiben des EEPROM mit einer Zeichenfolge möchte ich erreichen,
dass nur dann auf das beenden des hardwaremäßigen Schreibvorgang
gewartet werden muss, wenn beim erneuten Aufruf der Write-Routine,
dieser Vorgang, welcher ja unabhängig von der weiteren
Programmausführung hardwaremäßig abläuft, noch nicht beendet ist. Dies
funktioniert bis jetzt nicht.
Allerdings funktionieren die nachstehenden Abfragen (natürlich ist nur
jeweils eine davon aktiviert) nur NACH Beendigung der vorgeschriebenen
Sequenz zum Beschreiben des EEPROM.
Setze ich diese VOR die "requiered Sequences" wird nur fehlerhaft oder
auch nur das zuletzt zu schreibende Zeichen im EEPROM abgelegt.
Führe ich dagegen ohne eine Abfrage, ein Delay von wenigstens 5ms vor
oder nach der Sequenz aus, werden die Zeichen in Abfolge korrekt
geschrieben. Unnötiges Warten möchte ich aber vermeiden.
1 | EE_Write
|
2 | ;-----------------Required Sequence - Start vgl. Datenblatt S.93
|
3 | movlw 0x55 ;55h must be written
|
4 | movwf EECON2 ; to EECON2 to start write sequence
|
5 | movlw 0xAA ;0xAA must be written
|
6 | movwf EECON2 ; to EECON2, to beginn
|
7 | bsf EECON1,WR ;b1=1 Write Control bit initiates a write cycle
|
8 | ; bit is cleared by hardware once write is complete.
|
9 | ;-----------------Required Sequence - Ende
|
10 | ; Abfrage des WriteControl-Bit
|
11 | banksel EECON1
|
12 | btfsc EECON1,WR ;=1? Write beendet?
|
13 | GOTO $-1 ;Nein weiter warten
|
14 | ;
|
15 | ; Abfrage des EEPROM-Write Interruptflags
|
16 | ;bsf PIE1,EEIE ;=1, Interrupt-enable Bit in "Init" gesetzt
|
17 | ;
|
18 | banksel PIR1,EEIF
|
19 | btfss PIR1,EEIF ;=1? EE-Write Interrupt gesetzt?
|
20 | GOTO $-1 ;Nein, weiter warten
|
21 | ; bcf PIR1,EEIF ;=0, wird nach Abschluss Write=1
|
Kann mir jemand sagen was ich da falsch mache, bzw nicht beachtet habe?
mfG Ottmar