LCD_ISR.a30
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:12k
源码类别:

uCOS

开发平台:

C/C++

  1. ; /*********************************************************************
  2. ; *                SEGGER MICROCONTROLLER SYSTEME GmbH                 *
  3. ; *        Solutions for real time microcontroller applications        *
  4. ; **********************************************************************
  5. ; *                                                                    *
  6. ; *           (C) 1996    SEGGER Microcontroller Systeme GmbH          *
  7. ; *                                                                    *
  8. ; *        Internet: www.segger.com    Support:  support@segger.com    *
  9. ; *                                                                    *
  10. ; **********************************************************************
  11. ; **** emWin/GSC Grafical user interface for embedded applications ****
  12. ; emWin is protected by international copyright laws. Knowledge of the
  13. ; source code may not be used to write a similar product. This file may
  14. ; only be used in accordance with a license and should not be re-
  15. ; distributed in any way. We appreciate your understanding and fairness.
  16. ; ----------------------------------------------------------------------
  17. ; File        : LCD_ISR.s34
  18. ; Purpose     : Interrupt service routine for 1/4/8-bit LCDs
  19. ; ----------------------------------------------------------------------
  20. ; Version-Date---Author-Explanation
  21. ; ----------------------------------------------------------------------
  22. ; 1.00.02 020821 JE   a) Changed to work with configurable ports
  23. ; 1.00.00 010417 JE   a) First release
  24. ; ----------------------------------------------------------------------
  25. ; Known problems or limitations with current version:
  26. ; None.
  27. ; ----------------------------------------------------------------------
  28. ; Items for future improvement:
  29. ; ---------------------------END-OF-HEADER------------------------------
  30. .include LCD_ISR.inc
  31. ; *********************************************************
  32. ; *
  33. ; *    Externals
  34. ; *
  35. ; *********************************************************
  36. .glb   _ISRTimerA1
  37. .glb   _LCD_X_Off
  38. .glb   _LCD_X_On
  39. .glb   _LCD__apVRam
  40. .glb   _LCD__aTimerReload
  41. .glb   _LCD__BitsPerPixel
  42. .FB    0
  43. ; *********************************************************
  44. ; *
  45. ; *    Data
  46. ; *
  47. ; *********************************************************
  48. .section data_SE,DATA
  49. Line:
  50.   .BLKB 2
  51. FrameCnt:
  52.   .BLKB 1
  53. GrayCnt:
  54.   .BLKB 1
  55. IntCnt:
  56.   .BLKB 1
  57. MCnt:
  58.   .BLKB 1
  59.   .BLKB 1
  60. pData:
  61. .BLKB 4
  62. ; *********************************************************
  63. ; *
  64. ; *    Defines for special function registers
  65. ; *
  66. ; *********************************************************
  67. TA1IC  .equ  56h
  68. TA1    .equ 388h
  69. TA1MR  .equ 397h
  70. TA2    .equ 38ah
  71. TA2MR  .equ 398h
  72. TABSR  .equ 380h
  73. ;P0     .equ 3e0h
  74. ;P7     .equ 3edh
  75. ;P8     .equ 3f0h
  76. ;P7D    .equ 1007
  77. ;P8D    .equ 1010
  78. DM0SL  .equ 3b8h
  79. DM0CON .equ  2ch
  80. SAR0   .equ  20h
  81. DAR0   .equ  24h
  82. TCR0   .equ  28h
  83. ; *********************************************************
  84. ; *
  85. ; *    Config defaults
  86. ; *
  87. ; *********************************************************
  88. ;PORT_DATA .equ P7
  89. ;PORT_CTRL .equ P8
  90. MASK_M   .equ (1<<0)
  91. MASK_FLM .equ (1<<1)
  92. MASK_CL1 .equ (1<<2)
  93. MASK_DON .equ (1<<3)
  94. MASK_CL2 .equ (1<<4)
  95. ; *********************************************************
  96. ; *
  97. ; *    Data transfer macros (used in ISR)
  98. ; *
  99. ; *********************************************************
  100. .if LCD_USEDMA
  101. WRITEDATA2LCD  .MACRO Off
  102.    .ENDM
  103. .elif LCD_INTERFACEBITS == 8
  104. WRITEDATA2LCD  .MACRO Off
  105.         MOV.W   Off[FB], R0
  106. ; 1. byte
  107.         MOV.B   R1H, [A1]
  108.         MOV.B   R0L, [A0]
  109.         MOV.B   R1L, [A1]
  110. ; 2.byte
  111.         MOV.B   R1H, [A1]
  112.         MOV.B   R0H, [A0]
  113.         MOV.B   R1L, [A1]
  114.    .ENDM
  115. .elif LCD_INTERFACEBITS == 4
  116. WRITEDATA2LCD  .MACRO Off
  117.         MOV.W   Off[FB], R0
  118. ; 1. nibble
  119.         MOV.B   R1H, [A1]
  120.         MOVHL   R0L, [A0]
  121.         MOV.B   R1L, [A1]
  122. ; 2. nibble
  123.         MOV.B   R1H, [A1]
  124.         MOV.B   R0L, [A0]
  125.         MOV.B   R1L, [A1]
  126. ; 3. nibble
  127.         MOV.B   R0H, R0L
  128.         SHL.B   #-4,R0L
  129.         MOV.B   R1H, [A1]
  130.         MOV.B   R0L, [A0]
  131.         MOV.B   R1L, [A1]
  132. ; 4. nibble
  133.         MOV.B   R1H, [A1]
  134.         MOV.B   R0H, [A0]
  135.         MOV.B   R1L, [A1]
  136.    .ENDM
  137. .elif LCD_INTERFACEBITS == 1
  138. WRITEDATA2LCD  .MACRO Off
  139.         MOV.B   Off[A0], R0L
  140.         MOV.B   R1H, [A1]
  141.         ROT.B   #1,R0L
  142.         MOV.B   R0L, LCD_PORT_DATA
  143.         MOV.B   R1L, [A1]
  144.         MOV.B   R1H, [A1]
  145.         ROT.B   #1,R0L
  146.         MOV.B   R0L, LCD_PORT_DATA
  147.         MOV.B   R1L, [A1]
  148.         MOV.B   R1H, [A1]
  149.         ROT.B   #1,R0L
  150.         MOV.B   R0L, LCD_PORT_DATA
  151.         MOV.B   R1L, [A1]
  152.         MOV.B   R1H, [A1]
  153.         ROT.B   #1,R0L
  154.         MOV.B   R0L, LCD_PORT_DATA
  155.         MOV.B   R1L, [A1]
  156.         MOV.B   R1H, [A1]
  157.         ROT.B   #1,R0L
  158.         MOV.B   R0L, LCD_PORT_DATA
  159.         MOV.B   R1L, [A1]
  160.         MOV.B   R1H, [A1]
  161.         ROT.B   #1,R0L
  162.         MOV.B   R0L, LCD_PORT_DATA
  163.         MOV.B   R1L, [A1]
  164.         MOV.B   R1H, [A1]
  165.         ROT.B   #1,R0L
  166.         MOV.B   R0L, LCD_PORT_DATA
  167.         MOV.B   R1L, [A1]
  168.         MOV.B   R1H, [A1]
  169.         ROT.B   #1,R0L
  170.         MOV.B   R0L, LCD_PORT_DATA
  171.         MOV.B   R1L, [A1]
  172.    .ENDM
  173. .endif
  174. ; *********************************************************
  175. ; *
  176. ; *                   ISR
  177. ; *
  178. ; *********************************************************
  179. .section program
  180. _ISRTimerA1:
  181.         FSET    B
  182.         pushm   FB   ; not needed with IAR
  183. ; *** Output next line / first line signals
  184.         MOV.W   #LCD_PORT_CTRL, A1
  185.         CMP.W   #LCD_YSIZE,Line
  186.         JNE     ISR_NextLine
  187.         INC.B   FrameCnt
  188.         OR.B    #MASK_FLM, [A1]
  189.         OR.B    #MASK_CL1, [A1]
  190.         AND.B   #~MASK_CL1,[A1]
  191.         AND.B   #~MASK_FLM,[A1]
  192.         JMP.B   NLDone
  193. ISR_NextLine:
  194.         OR.B    #MASK_CL1,  [A1]
  195.         AND.B   #~MASK_CL1, [A1]
  196. NLDone:
  197. ; *** Check if M has to be inverted
  198.         DEC.B   MCnt
  199.         JNE     M_Done
  200.         MOV.B   #7,MCnt
  201.         XOR.B   #MASK_M, [A1]
  202. M_Done:
  203. ;
  204. ; Start processing the new line
  205. ;
  206. ; *** Last line ?      if (--Line<0) {
  207.         ADD.W   #-1,Line
  208.         JPZ      ManageDone
  209.         MOV.W   #LCD_YSIZE,Line
  210. ; *** Handle GrayCnt
  211.         MOV.B   GrayCnt, R0L
  212.         DEC.B   R0L
  213.         MOV.B   R0L, GrayCnt
  214.         JPZ     GrayCntDone
  215.         LDE.B   _LCD__BitsPerPixel, R0L
  216.         DEC.B   R0L
  217.         MOV.B   R0L, GrayCnt
  218. GrayCntDone:
  219.         ADD.B   R0L, R0L  ; *2 for U16 array
  220.         MOV.B   R0L, A0
  221.         LDE.W   _LCD__aTimerReload[A0], A1
  222.         MOV.W   A1,TA1
  223.         ADD.B   R0L, R0L  ; *4 for far pointer array
  224.         MOV.B   R0L, A0
  225.         LDE.W   _LCD__apVRam[A0], A1
  226.         STE.W   A1, pData
  227.         LDE.W   2+_LCD__apVRam[A0], A1
  228.         STE.W   A1, pData+2
  229. ManageDone:
  230. .if     LCD_USEDMA
  231. ; *** Program DMA Destination: 8-bit latch
  232.         MOV.W   pData, SAR0
  233.         MOV.B   pData+2, SAR0+2  
  234.         MOV.B   #19h, DM0CON    ; 8 bits, source increments   
  235.         MOV.W   #LCD_BYTESPERLINE, TCR0
  236. .else
  237.         MOV.W   #LCD_PORT_CTRL, A1
  238.         MOV.W   #LCD_PORT_DATA, A0
  239.         MOV.B   [A1], R1L
  240.         MOV.B   R1L, R1H
  241.         OR.B    #MASK_CL2, R1H
  242.         AND.B   #255-MASK_CL2, R1L
  243.         LDC     pData, FB
  244. .endif
  245.     WRITEDATA2LCD 0
  246. .if LCD_BYTESPERLINE > 2
  247.     WRITEDATA2LCD 2
  248. .endif
  249. .if LCD_BYTESPERLINE > 4
  250.     WRITEDATA2LCD 4
  251. .endif
  252. .if LCD_BYTESPERLINE > 6
  253.     WRITEDATA2LCD 6
  254. .endif
  255. .if LCD_BYTESPERLINE > 8
  256.     WRITEDATA2LCD 8
  257. .endif
  258. .if LCD_BYTESPERLINE > 10
  259.     WRITEDATA2LCD 10
  260. .endif
  261. .if LCD_BYTESPERLINE > 12
  262.     WRITEDATA2LCD 12
  263. .endif
  264. .if LCD_BYTESPERLINE > 14
  265.     WRITEDATA2LCD 14
  266. .endif
  267. .if LCD_BYTESPERLINE > 16
  268.     WRITEDATA2LCD 16
  269. .endif
  270. .if LCD_BYTESPERLINE > 18
  271.     WRITEDATA2LCD 18
  272. .endif
  273. .if LCD_BYTESPERLINE > 20
  274.     WRITEDATA2LCD 20
  275. .endif
  276. .if LCD_BYTESPERLINE > 22
  277.     WRITEDATA2LCD 22
  278. .endif
  279. .if LCD_BYTESPERLINE > 24
  280.     WRITEDATA2LCD 24
  281. .endif
  282. .if LCD_BYTESPERLINE > 26
  283.     WRITEDATA2LCD 26
  284. .endif
  285. .if LCD_BYTESPERLINE > 28
  286.     WRITEDATA2LCD 28
  287. .endif
  288. .if LCD_BYTESPERLINE > 30
  289.     WRITEDATA2LCD 30
  290. .endif
  291. .if LCD_BYTESPERLINE > 32
  292.     WRITEDATA2LCD 32
  293. .endif
  294. .if LCD_BYTESPERLINE > 34
  295.     WRITEDATA2LCD 34
  296. .endif
  297. .if LCD_BYTESPERLINE > 36
  298.     WRITEDATA2LCD 36
  299. .endif
  300. .if LCD_BYTESPERLINE > 38
  301.     WRITEDATA2LCD 38
  302. .endif
  303. .if LCD_BYTESPERLINE > 40
  304.     WRITEDATA2LCD 40
  305. .endif
  306. .if LCD_BYTESPERLINE > 42
  307.     WRITEDATA2LCD 42
  308. .endif
  309. .if LCD_BYTESPERLINE > 44
  310.     WRITEDATA2LCD 44
  311. .endif
  312. .if LCD_BYTESPERLINE > 46
  313.     WRITEDATA2LCD 46
  314. .endif
  315. .if LCD_BYTESPERLINE > 48
  316.     WRITEDATA2LCD 48
  317. .endif
  318. .if LCD_BYTESPERLINE > 50
  319.     WRITEDATA2LCD 50
  320. .endif
  321. .if LCD_BYTESPERLINE > 52
  322.     WRITEDATA2LCD 52
  323. .endif
  324. .if LCD_BYTESPERLINE > 54
  325.     WRITEDATA2LCD 54
  326. .endif
  327. .if LCD_BYTESPERLINE > 56
  328.     WRITEDATA2LCD 56
  329. .endif
  330. .if LCD_BYTESPERLINE > 58
  331.     WRITEDATA2LCD 58
  332. .endif
  333. .if LCD_BYTESPERLINE > 60
  334.     WRITEDATA2LCD  60
  335. .endif
  336. .if LCD_BYTESPERLINE > 62
  337.     WRITEDATA2LCD  62
  338. .endif
  339. .if LCD_BYTESPERLINE > 64
  340.     WRITEDATA2LCD  64
  341. .endif
  342. .if LCD_BYTESPERLINE > 66
  343.     WRITEDATA2LCD  66
  344. .endif
  345. .if LCD_BYTESPERLINE > 68
  346.     WRITEDATA2LCD  68
  347. .endif
  348. .if LCD_BYTESPERLINE > 70
  349.     WRITEDATA2LCD  70
  350. .endif
  351. .if LCD_BYTESPERLINE > 72
  352.     WRITEDATA2LCD  72
  353. .endif
  354. .if LCD_BYTESPERLINE > 74
  355.     WRITEDATA2LCD  74
  356. .endif
  357. .if LCD_BYTESPERLINE > 76
  358.     WRITEDATA2LCD  76
  359. .endif
  360. .if LCD_BYTESPERLINE > 78
  361.     WRITEDATA2LCD  78
  362. .endif
  363. .if LCD_BYTESPERLINE > 80
  364.     WRITEDATA2LCD  80
  365. .endif
  366. .if LCD_BYTESPERLINE > 82
  367.     WRITEDATA2LCD  82
  368. .endif
  369. .if LCD_BYTESPERLINE > 84
  370.     WRITEDATA2LCD  84
  371. .endif
  372. .if LCD_BYTESPERLINE > 86
  373.     WRITEDATA2LCD  86
  374. .endif
  375. .if LCD_BYTESPERLINE > 88
  376.     WRITEDATA2LCD  88
  377. .endif
  378. .if LCD_BYTESPERLINE > 90
  379.     WRITEDATA2LCD  90
  380. .endif
  381. .if LCD_BYTESPERLINE > 92
  382.     WRITEDATA2LCD  92
  383. .endif
  384. .if LCD_BYTESPERLINE > 94
  385.     WRITEDATA2LCD  94
  386. .endif
  387. .if LCD_BYTESPERLINE > 96
  388.     WRITEDATA2LCD  96
  389. .endif
  390. .if LCD_BYTESPERLINE > 98
  391.     WRITEDATA2LCD  98
  392. .endif
  393. .if LCD_BYTESPERLINE > 100
  394.     WRITEDATA2LCD  100
  395. .endif
  396. .if LCD_BYTESPERLINE > 102
  397.     WRITEDATA2LCD  102
  398. .endif
  399. .if LCD_BYTESPERLINE > 104
  400.     WRITEDATA2LCD  104
  401. .endif
  402. .if LCD_BYTESPERLINE > 106
  403.     WRITEDATA2LCD  106
  404. .endif
  405. .if LCD_BYTESPERLINE > 108
  406.     WRITEDATA2LCD  108
  407. .endif
  408. .if LCD_BYTESPERLINE > 110
  409.     WRITEDATA2LCD  110
  410. .endif
  411. .if LCD_BYTESPERLINE > 112
  412.     WRITEDATA2LCD  112
  413. .endif
  414. .if LCD_BYTESPERLINE > 114
  415.     WRITEDATA2LCD  114
  416. .endif
  417. .if LCD_BYTESPERLINE > 116
  418.     WRITEDATA2LCD  116
  419. .endif
  420. .if LCD_BYTESPERLINE > 118
  421.     WRITEDATA2LCD  118
  422. .endif
  423.         ADD.W   #LCD_BYTESPERLINE,pData
  424.         POPM    FB      ; this instruction is not needed with IAR since FB is not used
  425.         REIT    
  426. ; *********************************************************
  427. ; *
  428. ; *                   LCD_On
  429. ; *
  430. ; *********************************************************
  431. _LCD_X_On:
  432.         PUSHM   R0
  433. ;        MOV.B   #0ffh, P7D
  434. ;        MOV.B   #0ffh, P8D
  435.         LDE.W   _LCD__apVRam,R0
  436.         STE.W   R0,pData
  437.         LDE.W   2+_LCD__apVRam,R0
  438.         STE.W   R0,pData+2
  439.         LDE.W   _LCD__aTimerReload, R0 ;
  440. ; *** Line refresh: TA1
  441.         MOV.W   R0,TA1
  442.         MOV.B   #0,TA1MR ; Timer mode register
  443.         MOV.B  #7,TA1IC  ; Timer interrupt register, high prio
  444. .if LCD_USEDMA
  445. ; *** Program DMA Destination: 8-bit latch
  446.         MOV.W   #(LCD_DMADEST & 0ffffh), DAR0
  447.         MOV.B   #((LCD_DMADEST >> 016) & 0ffh), DAR0+2
  448.         MOV.B   #4, DM0SL       ; USE Timer A2 as trigger
  449.         MOV.B   #19h, DM0CON    ; 8 bits, source increments   
  450. ; *** Shift timer: TA2
  451.         MOV.W   #8,TA2
  452.         MOV.B   #0,TA2MR ; Timer mode register
  453.         or.B   #(1<<2),TABSR
  454. .endif
  455.         OR.B    #(1<<1),TABSR
  456.         OR.B    #(1<<3),LCD_PORT_CTRL
  457.         POPM    R0
  458.         RTS     
  459. ; *********************************************************
  460. ; *
  461. ; *                   LCD_Off
  462. ; *
  463. ; *********************************************************
  464. _LCD_X_Off:
  465.         AND.B   #253, TABSR       ; Start timer : TABSR &= ~(1<<1)
  466.         AND.B   #~(1<<3),LCD_PORT_CTRL
  467.         RTS     
  468. .end