📄 mmc.lst
字号:
A 216 .type 12
A 217 .type 0
A 218 .endef
A 219 .define "byte2"
A 220 .value 1
A 221 .class 8
A 222 .type 12
A 223 .type 0
A 224 .endef
A 225 .define "byte3"
A 226 .value 2
A 227 .class 8
A 228 .type 12
A 229 .type 0
A 230 .endef
A 231 .define "byte4"
A 232 .value 3
A 233 .class 8
A 234 .type 12
A 235 .type 0
A 236 .endef
A 237 .define "byte5"
A 238 .value 4
A 239 .class 8
A 240 .type 12
A 241 .type 0
A 242 .endef
A 243 .define "byte6"
A 244 .value 5
A 245 .class 8
A 246 .type 12
A 247 .type 0
A 248 .endef
A 249 .endrec "NONAME4"
A 250 ; 1 #include <ez8.h>
A 251 ; 2 #include <stdio.h>
A 252 ; 3 #include <sio.h>
A 253 ; 4 #include <stdlib.h>
A 254 ; 5 #include <string.h>
A 255 ; 6 #include "mmc.h"
A 256 ; 7 #include "spi.h"
A 257 ; 8 #include "fat.h"
A 258 ; 9
A 259 ; 10 unsigned char CSD[16];
A 260 SEGMENT mmc_TEXT
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 6
PC Object I Line Source mmc.src
A 261 ; 11
A 262 ; 12 typedef struct{
A 263 ; 13 unsigned char byte1;
A 264 ; 14 unsigned char byte2;
A 265 ; 15 unsigned char byte3;
A 266 ; 16 unsigned char byte4;
A 267 ; 17 unsigned char byte5;
A 268 ; 18 unsigned char byte6;
A 269 ; 19 }command;
A 270 ; 20
A 271 ; 21 void CommandMMC(unsigned char cmd_index, unsigned long cmd_argument)
A 272 ; 22 //sends a 6-byte command from the MCU to the MMC
A 273 ; 23 {
000000 A 274 _CommandMMC:
A 275 .define "_CommandMMC"
A 276 .value _CommandMMC
A 277 .class 2
A 278 .type 65
A 279 .type 0
A 280 .endef
A 281 .begfunc "CommandMMC",23,"_CommandMMC"
A 282 .define "cmd_index"
A 283 .class 9
A 284 .value 4
A 285 .type 12
A 286 .type 0
A 287 .endef
A 288 .define "cmd_argument"
A 289 .class 17
A 290 .reg -1
A 291 .type 15
A 292 .type 0
A 293 .endef
A 294 .define "cmd"
A 295 .class 1
A 296 .value -6
A 297 .tag "NONAME4"
A 298 .type 8
A 299 .type 0
A 300 .endef
A 301 .define "CRC7"
A 302 .class 1
A 303 .value -7
A 304 .type 12
A 305 .type 0
A 306 .endef
000000 9C07 A 307 LD R9,#7
000002 D6 0000 A 308 CALL __b_frameset0
A 309 ; 24 command cmd;
A 310 ; 25 unsigned char CRC7;
A 311 ; 26
A 312 ; 27 //first byte (start bit '0' + transmitter bit '1' + command index)
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 7
PC Object I Line Source mmc.src
A 313 ; 28 cmd.byte1 = 0x40|cmd_index;
A 314 .line 28
000005 880E04 A 315 LDX R0,4(RR14)
000008 E2E0 A 316 BSET 6,R0
00000A 89E0FA A 317 LDX -6(RR14),R0
A 318 ; 29
A 319 ; 30 //bytes 2-5 (command argument)
A 320 ; 31 cmd.byte2 = cmd_argument>>24;
A 321 .line 31
00000D 880E05 A 322 LDX R0,5(RR14)
000010 89E0FB A 323 LDX -5(RR14),R0
A 324 ; 32 cmd.byte3 = cmd_argument>>16;
A 325 .line 32
000013 880E06 A 326 LDX R0,6(RR14)
000016 89E0FC A 327 LDX -4(RR14),R0
A 328 ; 33 cmd.byte4 = cmd_argument>>8;
A 329 .line 33
000019 880E07 A 330 LDX R0,7(RR14)
00001C 89E0FD A 331 LDX -3(RR14),R0
A 332 ; 34 cmd.byte5 = cmd_argument;
A 333 .line 34
00001F 880E08 A 334 LDX R0,8(RR14)
000022 89E0FE A 335 LDX -2(RR14),R0
A 336 ; 35
A 337 ; 36 //CRC was not implemented in this application note
A 338 ; 37 //Although CRC is optional in SPI mode, it is a required token (i.e. a dummy CRC //must
A 339 ; 38 //last byte (crc + end bit '1')
A 340 ; 39 if( cmd.byte1 == 0x40 )
A 341 .line 39
000025 880EFA A 342 LDX R0,-6(RR14)
000028 A6E040 A 343 CP R0,#64
00002B EB 07 A 344 JR NE,_1_L_5
A 345 ; 40 cmd.byte6 = 0x95;
A 346 .line 40
00002D 0C95 A 347 LD R0,#149
00002F 89E0FF A 348 LDX -1(RR14),R0
A 349 ; 41 else if( cmd.byte1 == 0x41 )
A 350 .line 41
000032 8B 28 A 351 JR _1_L_6
000034 A 352 _1_L_5:
000034 880EFA A 353 LDX R0,-6(RR14)
000037 A6E041 A 354 CP R0,#65
00003A EB 07 A 355 JR NE,_1_L_3
A 356 ; 42 cmd.byte6 = 0xFF;
A 357 .line 42
00003C 0CFF A 358 LD R0,#255
00003E 89E0FF A 359 LDX -1(RR14),R0
A 360 ; 43 else if( cmd.byte1 == 0x7B )
A 361 .line 43
000041 8B 19 A 362 JR _1_L_6
000043 A 363 _1_L_3:
000043 880EFA A 364 LDX R0,-6(RR14)
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 8
PC Object I Line Source mmc.src
000046 A6E07B A 365 CP R0,#123
000049 EB 07 A 366 JR NE,_1_L_1
A 367 ; 44 cmd.byte6 = 0x01;
A 368 .line 44
00004B 0C01 A 369 LD R0,#1
00004D 89E0FF A 370 LDX -1(RR14),R0
A 371 ; 45 else
A 372 .line 45
000050 8B 0A A 373 JR _1_L_6
000052 A 374 _1_L_1:
A 375 ; 46 cmd.byte6 = (CRC7<<1)|0x01;
A 376 .line 46
000052 880EF9 A 377 LDX R0,-7(RR14)
000055 0200 A 378 ADD R0,R0
000057 E280 A 379 BSET 0,R0
000059 89E0FF A 380 LDX -1(RR14),R0
00005C A 381 _1_L_6:
A 382 ; 47
A 383 ; 48 //send command per byte
A 384 ; 49 TransferSPI(cmd.byte1);
A 385 .line 49
00005C 880EFA A 386 LDX R0,-6(RR14)
00005F 70E0 A 387 PUSH R0
000061 D6 0000 A 388 CALL _TransferSPI
000064 50E0 A 389 POP R0
A 390 ; 50 TransferSPI(cmd.byte2);
A 391 .line 50
000066 880EFB A 392 LDX R0,-5(RR14)
000069 70E0 A 393 PUSH R0
00006B D6 0000 A 394 CALL _TransferSPI
00006E 50E0 A 395 POP R0
A 396 ; 51 TransferSPI(cmd.byte3);
A 397 .line 51
000070 880EFC A 398 LDX R0,-4(RR14)
000073 70E0 A 399 PUSH R0
000075 D6 0000 A 400 CALL _TransferSPI
000078 50E0 A 401 POP R0
A 402 ; 52 TransferSPI(cmd.byte4);
A 403 .line 52
00007A 880EFD A 404 LDX R0,-3(RR14)
00007D 70E0 A 405 PUSH R0
00007F D6 0000 A 406 CALL _TransferSPI
000082 50E0 A 407 POP R0
A 408 ; 53 TransferSPI(cmd.byte5);
A 409 .line 53
000084 880EFE A 410 LDX R0,-2(RR14)
000087 70E0 A 411 PUSH R0
000089 D6 0000 A 412 CALL _TransferSPI
00008C 50E0 A 413 POP R0
A 414 ; 54 TransferSPI(cmd.byte6);
A 415 .line 54
00008E 880EFF A 416 LDX R0,-1(RR14)
ZiLOG Z8 Encore! Macro Assembler Version 2.45 (06120402) 14-Jan-09 10:50:23 page: 9
PC Object I Line Source mmc.src
000091 70E0 A 417 PUSH R0
000093 D6 0000 A 418 CALL _TransferSPI
000096 50E0 A 419 POP R0
A 420 ; 55
A 421 ; 56 }
A 422 .line 56
000098 D6 0000 A 423 CALL __b_framereset
00009B AF A 424 RET
A 425 .endfunc "CommandMMC",56,"_CommandMMC"
A 426 SEGMENT ROM_DATA
A 427
A 428
A 429 ;**************************** _WaitResponseMMC ***************************
A 430 ;Name Addr/Register Size Type
A 431 ;_TransferSPI IMPORT ----- function
A 432 ;response R15-1 0 variable
A 433
A 434
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -