From: user Date: Wed, 16 Aug 2023 10:24:25 +0000 (-0500) Subject: Add code to touch Nokia LCD X-Git-Url: https://git.the-white-hart.net/?a=commitdiff_plain;h=e0e5450b0154ee6b4ac8248301e9ef088dd8c71a;p=atmega%2Fsiggen.git Add code to touch Nokia LCD Oh yeah. It's all comin' together. Successful test on hardware. --- diff --git a/asm_2/interp.asm b/asm_2/interp.asm index b3e83de..7949b8f 100644 --- a/asm_2/interp.asm +++ b/asm_2/interp.asm @@ -105,78 +105,108 @@ ; ------------------------------------------------------------------------------ ; Bytecode + +; Pins for Nokia 5110 LCD +.equ P_LED = 0x4 +.equ P_SCLK = 0x5 +.equ P_MOSI = 0x3 +.equ P_DC = 0x0 +.equ P_RST = 0x1 +.equ P_SCE = 0x2 + + .cseg entry: - T_MOVI V1, 0x11111111 - T_MOV V2, V1 - T_ADD V2, V1 - T_OR V3, V1 - T_OR V3, V2 - T_MOV V6, V3 - T_ANDI V6, 0x0000000f - T_MUL V6, V2 - T_MOV V4, V2 - T_SHL V4, 4 - T_SHRA V4, 3 - T_NOR V4, V4 - T_ADDS V4, 1 - T_SHL V4, 3 - T_SHRA V4, 3 - T_SHL V4, 3 - T_SHRL V4, 3 - T_MOVI V4, -4 - T_CMP V4, V3 - T_BLT good1 - T_JMP failure -good1: - T_CMP V3, V4 - T_BLT failure - T_MOVI V0, 0xaaaaaaaa - T_CMP V4, V3 - T_BAE good2 - T_JMP failure -good2: - T_CMP V3, V4 - T_BAE failure - T_MOVI V0, 0xbbbbbbbb - T_JAL func - T_MOVI SP, variable - T_STB V0, SP, 0 - T_LDB V0, SP, 0 - T_MOVI V1, 0xdddddddd - T_STW V1, SP, 4 - T_LDH V1, SP, 4 - T_MOVI VC, (const<<1) - T_LPW V2, VC, 0 + ; Set up ports and SPI T_EXT ext_init - T_MOVS V0, 1 - T_DOUT V0, 2 - T_MOVS V0, 0 - T_DOUT V0, 2 - T_JMP halt -func: - T_MOVI V0, 0xcccccccc - T_JALR V1, RA -failure: - T_MOVI V0, 0xeeeeeeee + + ; Reset the LCD + T_JAL lcd_reset + + ; Do something with the LCD + T_MOVI A0, 0x21 + T_JAL lcd_cmd + T_MOVI A0, 0xb8 + T_JAL lcd_cmd + T_MOVI A0, 0x04 + T_JAL lcd_cmd + T_MOVI A0, 0x14 + T_JAL lcd_cmd + T_MOVI A0, 0x20 + T_JAL lcd_cmd + T_MOVI A0, 0x09 + T_JAL lcd_cmd + + ; Idle while blinking the LCD backlight + T_MOVS S0, 0 + T_MOVS S1, 1 +led_loop: + T_DOUT S1, P_LED + T_MOVI A0, 20000 + T_JAL delay + + T_DOUT S0, P_LED + T_MOVI A0, 20000 + T_JAL delay + + T_JMP led_loop + + halt: T_JMP halt +delay: + T_SUBS A0, 1 + T_BNZ delay + T_JALR TM, RA + +lcd_reset: + T_MOVS TM, 0 + T_DOUT TM, P_RST + T_MOVS TM, 1 + T_DOUT TM, P_RST + T_JALR TM, RA + +lcd_cmd: + T_MOVI TM, spi_buf + T_STB A0, TM, 0 + + T_MOVS A0, 0 + T_DOUT A0, P_DC + T_DOUT A0, P_SCE + T_SPI TM, 1 + T_MOVS A0, 1 + T_DOUT A0, P_SCE + + T_JALR TM, RA + ext_init: movw ZL, r24 - ldi r25, 0x7f + + ; Ports B and C all outputs + ldi r25, 0xff out DDRB, r25 out DDRC, r25 - ijmp + ; Set up SPI + ldi r25, (0 << SPIE) | \ + (1 << SPE) | \ + (0 << DORD) | \ + (1 << MSTR) | \ + (0 << CPOL) | \ + (0 << CPHA) | \ + (0b01 << SPR0) + out SPCR, r25 + ldi r25, (0 << SPI2X) + out SPSR, r25 + + ijmp -const: - .dw 0xcafe, 0xbeef .dseg -variable: +spi_buf: .byte 16 diff --git a/asm_2/program.sh b/asm_2/program.sh index 471116d..5a3d2f5 100755 --- a/asm_2/program.sh +++ b/asm_2/program.sh @@ -5,5 +5,5 @@ TARGET="atmega328p" PORT="/dev/ttyUSB0" PROGRAMMER="-P ${PORT} -b 19200 -c avrisp" -avrdude ${PROGRAMMER} -p ${TARGET} -U flash:w:siggen.hex +avrdude ${PROGRAMMER} -p ${TARGET} -U flash:w:interp.hex