📄 8733_spi_mt.lst
字号:
1 ;****************************************************************;
2 ; TILTE: eKTP8733N SPI Transfer DEMO CODE ;
3 ; FUNCTION: eKTP8733N SPI Transfer as Master ;
4 ; COMPANY: ELAN MICROELECTRONICS (SZ) LTD. ;
5 ;****************************************************************;
6 ; 该范例以eKTP8733N作为MASTER,MCU循环重复发送10个不同数据,每发送一
7 ; 个数据的时间间隔约1.6S. 发送的10组数据为: 0FH, F0H, 5AH, A5H, 5FH,
8 ; F5H, AFH, FAH, 55H, AAH; Fs: IRC 4MHz
9 ;-----------------------------------------------------------------
10 ; bank 0
11 0002 PC == 0x02 ; Program Counter & Stack
12 0003 STATUS == 0x03 ;
13 0000 C == 0 ; Carry flag
14 0002 Z == 2 ; Zero flag
15 0005 PORT5 == 0x05 ; PORT5 I/O register
16 0006 PORT6 == 0x06 ; PORT6 I/O register
17 0007 PORT7 == 0x07 ; PORT7 I/O register
18 0008 PORT8 == 0x08 ; PORT8 I/O register
19 000E B0RE == 0x0E
20 000E ISR1 == 0x0E ; Interrupt status register 1
21 0004 TCIF == 4 ; TCC interrupt flag
22 000F B0RF == 0x0F
23 000F ISR2 == 0x0F ; Interrupt status register 2
24 0003 SPIIF == 3 ; SPI interrupt flag
25 ; bank 1
26 0005 IOC5 == 0x05 ; PORT5 I/O control register
27 0006 IOC6 == 0x06 ; PORT6 I/O control register
28 0007 IOC7 == 0x07 ; PORT7 I/O control register
29 0008 IOC8 == 0x08 ; PORT8 I/O control register
30 000C WDTCR == 0x0C ; WDT timer control register
31 000E B1RE == 0x0E
32 000E IMR1 == 0x0E ; Interrupt mask register 1
33 000F B1RF == 0x0F
34 000F IMR2 == 0x0F ; Interrupt mask register 2
35 ; bank 2
36 0005 TCCCR == 0x05 ; Time Clock/Counter control register
37 ; bank 3
38 0005 TCC == 0x05 ; Time Clock/Counter
39 0006 COBS1 == 0x06 ; Code option: Type&IRC calibration register
40 0007 COBS2 == 0x07 ; Code option: LVR, Noise, IRC, RCOUT register
41 ; bank 7
42 000C SPIS == 0x0C ; SPI status register
43 000D SPICR == 0x0D ; SPI control register
44 0004 SSE == 4
45 000E SPIR == 0x0E ; SPI read buffer
46 000F SPIW == 0x0F ; SPI write buffer
47 ;
48 001E DATA_BUF == 0x1E ; Data buffer
49 001F TEMP == 0x1F
50 ;-----------------------------------------------------------------
51 ORG 0x00
52 00000 0000 NOP
53 00001 1453 JMP Main
54 ORG 0X1B ; SPI interrupt vector
55 0001B 1EB0 LJMP SPI_INT ; To SPI interrupt program
55 0001C 0050 LJMP SPI_INT ; To SPI interrupt program
56 ORG 0x50
57 ;-----------------------------------------------------------------
58 00050 SPI_INT:
59 ; User code
60 ; ...
61 00050 1E90 BANK 0
62 00051 08CF BC ISR2, SPIIF
63 00052 0013 RETI
64 ;-----------------------------------------------------------------
65 00053 Main:
66 00053 0000 NOP
67 00054 1E90 BANK 0
68 00055 00C5 CLR PORT5 ; PORT5 output logic "0"
69 00056 00C6 CLR PORT6 ; PORT6 output logic "0"
70 00057 00C7 CLR PORT7 ; PORT7 output logic "0"
71 00058 00C8 CLR PORT8 ; PORT8 output logic "0"
72 00059 00DE CLR 0x1E
73 0005A 00DF CLR 0x1F
74 0005B 1E91 BANK 1
75 0005C 00C5 CLR IOC5 ; Set port5 as output pin
76 0005D 1808 MOV A, @0x08
77 0005E 0046 MOV IOC6, A ; Set P63 as input pin
78 0005F 00C7 CLR IOC7 ; Set port7 as output pin
79 00060 00C8 CLR IOC8 ; Set port8 as output pin
80 00061 1800 MOV A, @0x00
81 00062 004C MOV WDTCR, A ; Disable WDT
82 00063 1810 MOV A, @0x10
83 00064 004E MOV IMR1, A ; Enable TCC interrupt
84 00065 1800 MOV A, @0x00
85 00066 004F MOV IMR2, A ; Disable SPI interrupt
86 00067 1E92 BANK 2
87 00068 1800 MOV A, @0x00
88 00069 0045 MOV TCCCR, A ; TCC rate --> 1:1
89 0006A 1E93 BANK 3
90 0006B 183F MOV A, @0x3F ; Select ekt8733, irc: 1*F
91 0006C 0046 MOV COBS1, A
92 0006D 1830 MOV A, @0x30 ; Select IRC 4MHz
93 0006E 0047 MOV COBS2, A
94 0006F 00C5 CLR TCC
95 00070 1E97 BANK 7
96 00071 1840 MOV A, @01000000b ; Shift left, SDO delay time: 16clk,
97 00072 004C MOV SPIS, A ; disable open-drain
98 00073 184C MOV A, @01001100b ; Data shift out rising edge, is on hold during low
99 00074 004D MOV SPICR, A ; Enable SPI mode, after data output sdo remain low
100 ; Selecting SPI Baud Rate is Fosc/32
101 ;-----------------------------------------------
102 00075 LOOP:
103 00075 041E MOV A, DATA_BUF ; To get data to transfer
104 00076 108C CALL Data_Tbl
105 00077 1E97 BANK 7
106 00078 004F MOV SPIW, A ; Write data to buffer
107 00079 0B0D BS SPICR, SSE ; Start to shift data
108 0007A 0D0D JBC SPICR, SSE ; Wait to finish shift data
109 0007B 147A JMP $-1
110 0007C 00DF CLR TEMP
111 ;JMP LOOP
112 0007D WAITLP:
113 0007D 1E90 BANK 0
114 0007E 0F0E JBS ISR1, TCIF ; Wait for about 1.28Ms to shift next data
115 0007F 147E JMP $-1
116 00080 00CE CLR ISR1 ; Clear TCC flag
117 00081 055F INC TEMP
118 00082 041F MOV A, TEMP
119 00083 1FEC ADD A, @256-20 ; 256*1*20/4M
120 00084 0E03 JBS STATUS, C
121 00085 147D JMP WAITLP
122 ;
123 00086 055E INC DATA_BUF
124 00087 041E MOV A, DATA_BUF ; After shifting 10 bytes data, repeat
125 00088 1FF6 ADD A, @256-10
126 00089 0C03 JBC STATUS, C
127 0008A 00DE CLR DATA_BUF
128 0008B 1475 JMP LOOP
129 ;-----------------------------------------------
130 0008C Data_Tbl:
131 0008C 03C2 ADD PC, A
132 0008D 1C0F RETL 0x0F ; 0
133 0008E 1CF0 RETL 0xF0 ; 1
134 0008F 1C5A RETL 0x5A ; 2
135 00090 1CA5 RETL 0xA5 ; 3
136 00091 1C5F RETL 0x5F ; 4
137 00092 1CF5 RETL 0xF5 ; 5
138 00093 1CAF RETL 0xAF ; 6
139 00094 1CFA RETL 0xFA ; 7
140 00095 1C55 RETL 0x55 ; 8
141 00096 1CAA RETL 0xAA ; 9
142 ;-----------------------------------------------
143 END
144
0 Error(s), 0 Warning(s), 0 User Message(s)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -