OpenCores
URL https://opencores.org/ocsvn/ssbcc/ssbcc/trunk

Subversion Repositories ssbcc

[/] [ssbcc/] [trunk/] [example/] [i2c/] [TMP100/] [uc/] [i2c_tmp100.s] - Blame information for rev 7

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 sinclairrf
; Copyright 2012, 2014, Sinclair R.F., Inc.
2
;
3
; TMP100:
4
;   run in 400 kHz mode
5
 
6
.constant C_TMP100_U14 ${9*16+2*2}
7
.constant C_TMP100_U15 ${9*16+0*2}
8
.constant C_TMP100_U16 ${9*16+6*2}
9
.constant C_TMP100_U18 ${9*16+4*2}
10
 
11
.include ../../lib_i2c.s
12
 
13
.main
14
 
15
  :infinite
16
    "\r\n\0"
17
    ${C_TMP100_U18|0x01} .call(get_i2c_temp)    ; right-most displayed value
18
    ${C_TMP100_U16|0x01} .call(get_i2c_temp)
19
    ${C_TMP100_U15|0x01} .call(get_i2c_temp)
20
    ${C_TMP100_U14|0x01} .call(get_i2c_temp)
21
    :print_loop
22
      .outport(O_UART_TX)
23
      :print_wait .inport(I_UART_TX) .jumpc(print_wait)
24
      .jumpc(print_loop,nop) drop
25
    .call(wait_1_sec)
26
  .jump(infinite)
27
 
28
 
29
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
30
;
31
; Read the I2C temperature sensor and put the ascii value on the stack.
32
;
33
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
34
 
35
.function get_i2c_temp
36
  0x20
37
  .call(i2c_send_start)
38
  .call(i2c_send_byte,swap) .jumpc(error)
39
    .call(i2c_read_byte,0) >r
40
    .call(i2c_read_byte,0) .call(byte_to_hex)
41
    r> .call(byte_to_hex)
42
    .jump(no_error)
43
  :error
44
    "----"
45
  :no_error
46
  .call(i2c_send_stop)
47
.return
48
 
49
 
50
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
51
;
52
; Convert a byte to a two digit hex value.
53
;
54
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
55
 
56
.memory RAM ram
57
.variable nibble_to_ascii "0123456789ABCDEF"
58
 
59
; ( u - ascii(lower_nibble(u)) ascii(upper_nibble(u)) )
60
.function byte_to_hex
61
 
62
  dup 0x0F & .fetchindexed(nibble_to_ascii)
63
  swap 0>> 0>> 0>> 0>> .fetchindexed(nibble_to_ascii)
64
 
65
.return
66
 
67
 
68
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
69
;
70
; Wait one second with a 100 MHz clock.
71
;
72
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
73
 
74
.function wait_1_sec
75
 
76
  ; 100 iterations
77
  ${100-1} :outer
78
    ; 1000 iterations
79
    ${4-1} :mid_outer
80
      ${250-1} :mid_inner
81
        ; 1000 clock cycles (250 iterations of 4 clock loop)
82
        250 :inner 1- .jumpc(inner,nop) drop
83
      .jumpc(mid_inner,1-) drop
84
    .jumpc(mid_outer,1-) drop
85
  .jumpc(outer,1-) drop
86
 
87
.return

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.