Appendix G
PicoBlaze assembly program for GSM Module with USB
;
;Port definitions
;
CONSTANT status_port, 00
CONSTANT tx_data_present, 01
CONSTANT tx_half_full, 02
CONSTANT tx_full, 04
CONSTANT rx_data_present, 08
CONSTANT rx_half_full, 10
CONSTANT rx_full, 20
;
CONSTANT UART_read_port, 01
;
CONSTANT UART_write_port, 01
;
;
CONSTANT USB_FIFO_port, 10
;
CONSTANT USB_FIFO_ctrl, 20
CONSTANT USB_rd_ena, 01
CONSTANT USB_RD, 02
CONSTANT USB_WR, 04
CONSTANT USB_TXE, 40
CONSTANT USB_RXF, 80
;
;
;Special Register usage
;
NAMEREG sF, DATA_IN_OUT
;
;
;Useful constants
;
;
;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_fullstop, 2E
CONSTANT character_semi_colon, 3B
CONSTANT character_minus, 2D
CONSTANT character_plus, 2B
CONSTANT character_comma, 2C
CONSTANT character_less_than, 3C ;'<'
CONSTANT character_greater_than, 3E ;'>'
CONSTANT character_open, 28 ;'('
CONSTANT character_close, 29 ;')'
CONSTANT character_divide, 2F ;'/'
CONSTANT character_equals, 3D
CONSTANT character_space, 20
CONSTANT character_CR, 0D ;carriage return
CONSTANT character_LF, 0A ;line feed
CONSTANT character_question, 3F ;'?'
CONSTANT character_dollar, 24
CONSTANT character_exclaim, 21 ;'!'
CONSTANT character_BS, 08 ;Back Space command character
CONSTANT character_XON, 11 ;Flow control ON
CONSTANT character_XOFF, 13 ;Flow control OFF
;
;
;
;
loop:
CALL read_from_UART
CALL NZ, write_USB_FIFO
CALL read_USB_FIFO
CALL NZ, send_to_UART
JUMP loop
;
;
;***********************************************************************
;USB communication routines
;***********************************************************************
;Registers used s0 and DATA_IN_OUT
;
read_from_UART:
INPUT s0, status_port
TEST s0, rx_data_present
RETURN Z
INPUT DATA_IN_OUT, UART_read_port
OR s0, FF
RETURN
;
;
read_USB_FIFO:
INPUT s0, USB_FIFO_ctrl
TEST s0, USB_RXF
RETURN Z
LOAD s0, USB_rd_ena
OUTPUT s0, USB_FIFO_ctrl
OR s0, USB_RD
OUTPUT s0, USB_FIFO_ctrl
LOAD s0, s0
INPUT DATA_IN_OUT, USB_FIFO_port
LOAD s0, 00
OUTPUT s0, USB_FIFO_ctrl
OR s0, FF
RETURN
;
;Transmit one character to the UART
send_to_UART:
INPUT s0, status_port
TEST s0, tx_full
JUMP NZ, send_to_UART
OUTPUT DATA_IN_OUT, UART_write_port
RETURN
;
write_USB_FIFO:
INPUT s0, USB_FIFO_ctrl
TEST s0, USB_TXE
JUMP Z, write_USB_FIFO
OUTPUT DATA_IN_OUT, USB_FIFO_port
LOAD s0, USB_WR
OUTPUT s0, USB_FIFO_ctrl
LOAD s0, 00
OUTPUT s0, USB_FIFO_ctrl
RETURN ;