Het Dwengo-bord programmeren zonder programmer

Voor sommige toepassingen, bijv. onderwijs, is het nodig dat meerdere mensen verschillende Dwengo-borden kunnen programmeren terwijl je toch maar over één programmer beschikt. In plaats van die ene programmer rond te laten gaan, kan je het Dwengo-bord ook uitrusten met een bootloader. Dit maakt het mogelijk om het Dwengo-bord te programmeren via een USB-kabel zonder een programmer te gebruiken.

Installeren van de bootloader

Je kan steeds zelf gemakkelijk een bootloader op het Dwengo-bord programmeren. Hiervoor download je eerst het hex-bestand Dwengo-bootloader dat werd toevoegd aan deze pagina. Dit hex-bestand bevat de bootloader voor het Dwengo-bord. Met behulp van MPLAB programmeer je het Dwengo-bord met dit hex-bestand. De bootloader zal nu de eerste 8192 bytes (0x000-0x1FFF) innemen van het programma-geheugen.

Schrijven van het programma

Aangezien de bootloader de eerste 8192 bytes (0x000-0x1FFF) in beslag neemt van het programma-geheugen, moet je bij het schrijven van jouw programma op twee dingen letten: het hermappen van de interrupt-vectoren en het aanpassen van het linker-script.

Het hermappen van de interrupt-routines gebeurt met volgende code:

  1. void YourHighPriorityISRCode();
  2. void YourLowPriorityISRCode();
  3.  
  4. // vector remapping
  5.  
  6. // Bootloader occupies addresses 0x000-0x1FFF and thus cannot be used.
  7. // Thus adresses 0x00, 0x08 and 0x18 (used for reset, high prior interrupt,
  8. // and low prior interrupt) have to be remapped.
  9. extern void _startup(void);
  10. #pragma code REMAPPED_RESET_VECTOR = 0x2000
  11. void _reset(void) {
  12. _asm goto _startup _endasm
  13. }
  14.  
  15. #pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = 0x2008
  16. void Remapped_High_ISR(void) {
  17. _asm goto YourHighPriorityISRCode _endasm
  18. }
  19. #pragma code REMAPPED_LOW_INTERRUPT_VECTOR = 0x2018
  20. void Remapped_Low_ISR (void)
  21. {
  22. _asm goto YourLowPriorityISRCode _endasm
  23. }
  24.  
  25. #pragma code HIGH_INTERRUPT_VECTOR = 0x08
  26. void High_ISR(void) {
  27. _asm goto 0x2008 _endasm
  28. }
  29. #pragma code LOW_INTERRUPT_VECTOR = 0x18
  30. void Low_ISR(void) {
  31. _asm goto 0x2018 _endasm
  32. }
  33.  
  34. #pragma code
  35.  
  36. // Interrupt handler routines
  37. #pragma interrupt YourHighPriorityISRCode
  38. void YourHighPriorityISRCode() {
  39. //Check which interrupt flag caused the interrupt
  40. //Service the interrupt
  41. //Clear the interrupt flag
  42. }
  43. #pragma interruptlow YourLowPriorityISRCode
  44. void YourLowPriorityISRCode() {
  45. // Check which interrupt flag caused the interrupt
  46. // Service the interrupt
  47. // Clear the interrupt flag
  48. }

Het linker-script moet aangepast worden zodat een stuk van het programma-geheugen voorzien wordt voor de bootloader. Daarnaast wordt ook een apart stuk voorzien voor de interrupt-vectoren. Volgende lijnen beschrijven een werkend linker-script om te gebruiken in combinatie met de bootloader:

  1. LIBPATH .
  2.  
  3. FILES c018i.o
  4. FILES clib.lib
  5. FILES p18f4550.lib
  6.  
  7. CODEPAGE NAME=bootloader START=0x0 END=0x1FFF PROTECTED
  8. CODEPAGE NAME=vectors START=0x2000 END=0x2029 PROTECTED
  9. CODEPAGE NAME=page START=0x202A END=0x7FFF
  10. CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED
  11. CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED
  12. CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
  13. CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED
  14.  
  15. ACCESSBANK NAME=accessram START=0x0 END=0x5F
  16. DATABANK NAME=gpr0 START=0x60 END=0xFF
  17. DATABANK NAME=gpr1 START=0x100 END=0x1FF
  18. DATABANK NAME=gpr2 START=0x200 END=0x2FF
  19. DATABANK NAME=gpr3 START=0x300 END=0x3FF
  20. DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED
  21. DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED
  22. DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED
  23. DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED
  24. ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
  25.  
  26. SECTION NAME=CONFIG ROM=config
  27.  
  28. STACK SIZE=0x100 RAM=gpr3
  29.  
  30. SECTION NAME=USB_VARS RAM=usb4

Programmeren zonder programmer

Wanneer het programma klaar is en je een hex-bestand hebt aangemaakt, kan je het Dwengo-bord programmeren. Hiervoor dien je eerst het USB-raamwerk op de website van Microchip External link te downloaden. Installeer het raamwerk en onder C:\Microchip Solutions\USB Device - Bootloaders\HID - Bootloader* vind je het programma *HIDBootLoader.exe. Start dit programma op. Indien het programma niet wil opstarten dan moet je eerst ook nog het Microsoft .NET-raamwerk External link te installeren.

Hierna sluit je het Dwengo-bord aan op de computer met behulp van de USB-kabel (en dus zonder programmer). Reset vervolgens het Dwengo-bord terwijl je de C-knop ingedrukt houdt. Wanneer je nu de C-knop loslaat, staat het bord in bootloader-modus. Het Dwengo-bord zal nu gedetecteerd worden door het HIDBootLoader-programma. Met behulp van het HIDBootLoader-programma kan je het hex-bestand van jouw programma inladen en programmeren op het Dwengo-bord.