⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.psm

📁 介绍了SP3实验板的系统结构和布局,用户指南.
💻 PSM
📖 第 1 页 / 共 3 页
字号:
                  ;KCPSM3 Program - Control of LEDs and LCD display using switches, buttons and rotary
                  ;controls on the Spartan-3E Starter Kit.
                  ;
                  ;
                  ;Ken Chapman - Xilinx Ltd
                  ;
                  ;Version v1.00 - 4th January 2006
                  ;
                  ;**************************************************************************************
                  ;Port definitions
                  ;**************************************************************************************
                  ;
                  ;
                  ;
                  CONSTANT LED_port, 80               ;8 simple LEDs
                  CONSTANT LED0, 01                   ;     LED 0 - bit0
                  CONSTANT LED1, 02                   ;         1 - bit1
                  CONSTANT LED2, 04                   ;         2 - bit2
                  CONSTANT LED3, 08                   ;         3 - bit3
                  CONSTANT LED4, 10                   ;         4 - bit4
                  CONSTANT LED5, 20                   ;         5 - bit5
                  CONSTANT LED6, 40                   ;         6 - bit6
                  CONSTANT LED7, 80                   ;         7 - bit7
                  ;
                  ;
                  CONSTANT switch_port, 00            ;Read switches and press buttons
                  CONSTANT switch0, 01                ;  Switches      SW0 - bit0
                  CONSTANT switch1, 02                ;                SW1 - bit1
                  CONSTANT switch2, 04                ;                SW2 - bit2
                  CONSTANT switch3, 08                ;                SW3 - bit3
                  CONSTANT BTN_east, 10               ;  Buttons      East - bit4
                  CONSTANT BTN_south, 20              ;              South - bit5
                  CONSTANT BTN_north, 40              ;              North - bit6
                  CONSTANT BTN_west, 80               ;               West - bit7
                  ;
                  ;
                  CONSTANT rotary_port, 01            ;Read status of rotary encoder
                  CONSTANT rotary_left, 01            ; Direction of last move Left=1 Right=0  - bit0
                  CONSTANT rotary_press, 02           ;     Centre press contact (active High) - bit1
                  ;
                  ;
                  ;LCD interface ports
                  ;
                  ;The master enable signal is not used by the LCD display itself
                  ;but may be required to confirm that LCD communication is active.
                  ;This is required on the Spartan-3E Starter Kit if the StrataFLASH
                  ;is used because it shares the same data pins and conflicts must be avoided.
                  ;
                  CONSTANT LCD_output_port, 40        ;LCD character module output data and control
                  CONSTANT LCD_E, 01                  ;   active High Enable        E - bit0
                  CONSTANT LCD_RW, 02                 ;   Read=1 Write=0           RW - bit1
                  CONSTANT LCD_RS, 04                 ;   Instruction=0 Data=1     RS - bit2
                  CONSTANT LCD_drive, 08              ;   Master enable (active High) - bit3
                  CONSTANT LCD_DB4, 10                ;   4-bit              Data DB4 - bit4
                  CONSTANT LCD_DB5, 20                ;   interface          Data DB5 - bit5
                  CONSTANT LCD_DB6, 40                ;                      Data DB6 - bit6
                  CONSTANT LCD_DB7, 80                ;                      Data DB7 - bit7
                  ;
                  ;
                  CONSTANT LCD_input_port, 02         ;LCD character module input data
                  CONSTANT LCD_read_spare0, 01        ;    Spare bits               - bit0
                  CONSTANT LCD_read_spare1, 02        ;    are zero                 - bit1
                  CONSTANT LCD_read_spare2, 04        ;                             - bit2
                  CONSTANT LCD_read_spare3, 08        ;                             - bit3
                  CONSTANT LCD_read_DB4, 10           ;    4-bit           Data DB4 - bit4
                  CONSTANT LCD_read_DB5, 20           ;    interface       Data DB5 - bit5
                  CONSTANT LCD_read_DB6, 40           ;                    Data DB6 - bit6
                  CONSTANT LCD_read_DB7, 80           ;                    Data DB7 - bit7
                  ;
                  ;
                  ;
                  ;**************************************************************************************
                  ;Special Register usage
                  ;**************************************************************************************
                  ;
                  ;**************************************************************************************
                  ;Scratch Pad Memory Locations
                  ;**************************************************************************************
                  ;
                  CONSTANT rotary_status, 00          ;Status of rotary encoder
                  CONSTANT ISR_preserve_s0, 01        ;Preserve s0 contents during ISR
                  ;
                  CONSTANT LED_pattern, 02            ;LED pattern used in rotation mode
                  ;
                  CONSTANT mode, 03                   ;control mode 00=switch and button FF=rotary
                  ;
                  ;
                  ;
                  ;**************************************************************************************
                  ;Useful data constants
                  ;**************************************************************************************
                  ;
                  ;
                  ;The main operation of the program uses 1ms delays to set the shift rate
                  ;of the LCD display. A 16-bit value determines how many milliseconds
                  ;there are between shifts
                  ;
                  ;Tests indicate that the fastest shift rate that the LCD display supports is
                  ;500ms. Faster than this and the display becomes less clear to read.
                  ;
                  CONSTANT shift_delay_msb, 01        ;delay is 500ms (01F4 hex)
                  CONSTANT shift_delay_lsb, F4
                  ;
                  ;
                  ;
                  ;
                  ;Constant to define a software delay of 1us. This must be adjusted to reflect the
                  ;clock applied to KCPSM3. Every instruction executes in 2 clock cycles making the
                  ;calculation highly predictable. The '6' in the following equation even allows for
                  ;'CALL delay_1us' instruction in the initiating code.
                  ;
                  ; delay_1us_constant =  (clock_rate - 6)/4       Where 'clock_rate' is in MHz
                  ;
                  ;Example: For a 50MHz clock the constant value is (10-6)/4 = 11  (0B Hex).
                  ;For clock rates below 10MHz the value of 1 must be used and the operation will
                  ;become lower than intended.
                  ;
                  CONSTANT delay_1us_constant, 0B
                  ;
                  ;
                  ;
                  ;ASCII table
                  ;
                  CONSTANT character_a, 61
                  CONSTANT character_b, 62
                  CONSTANT character_c, 63
                  CONSTANT character_d, 64
                  CONSTANT character_e, 65
                  CONSTANT character_f, 66
                  CONSTANT character_g, 67
                  CONSTANT character_h, 68
                  CONSTANT character_i, 69
                  CONSTANT character_j, 6A
                  CONSTANT character_k, 6B
                  CONSTANT character_l, 6C
                  CONSTANT character_m, 6D
                  CONSTANT character_n, 6E
                  CONSTANT character_o, 6F
                  CONSTANT character_p, 70
                  CONSTANT character_q, 71
                  CONSTANT character_r, 72
                  CONSTANT character_s, 73
                  CONSTANT character_t, 74
                  CONSTANT character_u, 75
                  CONSTANT character_v, 76
                  CONSTANT character_w, 77
                  CONSTANT character_x, 78
                  CONSTANT character_y, 79
                  CONSTANT character_z, 7A
                  CONSTANT character_A, 41
                  CONSTANT character_B, 42
                  CONSTANT character_C, 43
                  CONSTANT character_D, 44
                  CONSTANT character_E, 45
                  CONSTANT character_F, 46
                  CONSTANT character_G, 47
                  CONSTANT character_H, 48
                  CONSTANT character_I, 49
                  CONSTANT character_J, 4A
                  CONSTANT character_K, 4B
                  CONSTANT character_L, 4C
                  CONSTANT character_M, 4D
                  CONSTANT character_N, 4E
                  CONSTANT character_O, 4F
                  CONSTANT character_P, 50
                  CONSTANT character_Q, 51
                  CONSTANT character_R, 52
                  CONSTANT character_S, 53
                  CONSTANT character_T, 54
                  CONSTANT character_U, 55
                  CONSTANT character_V, 56
                  CONSTANT character_W, 57
                  CONSTANT character_X, 58
                  CONSTANT character_Y, 59
                  CONSTANT character_Z, 5A
                  CONSTANT character_0, 30
                  CONSTANT character_1, 31
                  CONSTANT character_2, 32
                  CONSTANT character_3, 33
                  CONSTANT character_4, 34
                  CONSTANT character_5, 35
                  CONSTANT character_6, 36
                  CONSTANT character_7, 37
                  CONSTANT character_8, 38
                  CONSTANT character_9, 39
                  CONSTANT character_colon, 3A
                  CONSTANT character_stop, 2E
                  CONSTANT character_semi_colon, 3B
                  CONSTANT character_minus, 2D
                  CONSTANT character_divide, 2F       ;'/'
                  CONSTANT character_plus, 2B
                  CONSTANT character_comma, 2C
                  CONSTANT character_less_than, 3C
                  CONSTANT character_greater_than, 3E
                  CONSTANT character_equals, 3D
                  CONSTANT character_space, 20
                  CONSTANT character_CR, 0D           ;carriage return
                  CONSTANT character_question, 3F     ;'?'
                  CONSTANT character_dollar, 24
                  CONSTANT character_exclaim, 21      ;'!'
                  CONSTANT character_BS, 08           ;Back Space command character
                  ;
                  ;
                  ;
                  ;
                  ;
                  ;**************************************************************************************
                  ;Initialise the system
                  ;**************************************************************************************
                  ;
      cold_start: CALL LCD_reset                      ;initialise LCD display
                  ENABLE INTERRUPT
                  ;
                  ;Write welcome message to LCD display
                  ;
                  LOAD s5, 10                         ;Line 1 position 0
                  CALL LCD_cursor
                  CALL disp_SPARTAN                   ;Display 'SPARTAN-3E STARTER KIT'
                  LOAD s5, 2E                         ;Line 2 position 14
                  CALL LCD_cursor
                  CALL disp_www                       ;Display 'www.xilinx.com/s3estarter'
                  ;
                  LOAD s0, 08                         ;initialise walking '1' pattern
                  STORE s0, LED_pattern
                  ;
                  LOAD sD, FF                         ;initial mode is rotary control
                  STORE sD, mode
                  ;
                  ;**************************************************************************************
                  ;Main program
                  ;**************************************************************************************
                  ;
                  ;The main program is responsible for continuously shifting the LCD display
                  ;at 0.5 second intervals. It also polls the centre press button of the rotary
                  ;encoder to determine which mode of LED control should be active.
                  ;
                  ;
 LCD_shift_delay: LOAD sF, shift_delay_msb            ; [sF,sE]=loop delay in ms
                  LOAD sE, shift_delay_lsb
  LCD_delay_loop: INPUT s0, rotary_port               ;test for press of rotary
                  TEST s0, rotary_press
                  JUMP NZ, mode_switch
                  FETCH sD, mode                      ;perform control task required
                  COMPARE sD, 00
                  CALL Z, normal_mode
                  COMPARE sD, FF

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -