KWIKSTIK SLCD HELP TO JUST LIGHT A SEGMENT

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

KWIKSTIK SLCD HELP TO JUST LIGHT A SEGMENT

跳至解决方案
836 次查看
derill03
Contributor I

Hello I am a neewb to the ARM family, i am in a lab class where we are using assembly to write code on the kwikstik K40.

 

I am really frustrated as i nor the teacher can figure out how to light even one segment on the SLCD, can anyone help me with just a small code in ASSEMBLY please that will help me understand what steps need to be taken to light some segments PLEASE!!

 

Below is what ive tried just by poking in the debug registers and trying to get something but it crashes and does not store any values to the specified registers

 

.section .sdata
         .align 2
VAL1:         .word 0x00000001
VAL2:         .word 0x00000001
VAL3:         .word 0x00000001
VAL4:         .word 0x80800080

      .text
      .align 4

LCD_GCR:  .word 0x400BE000
LCD_PENL:   .word 0x400BE010

          .global main
main:
      LDR R1,LCD_GCR
      LDR R2,VAL4
      STR R2,[R1]
      LDR R1,LCD_PENL
      LDR R2,VAL1
      STR R2,[R1]
      NOP
      .END
0 项奖励
1 解答
634 次查看
mjbcswitzerland
Specialist V

Hi

 

The segment LCD controller needs to be powered up and configured before it can be used.

 

The following initialisation is required:

 

                                   MCG_C1 |= MCG_C1_IRCLKEN; \                                   POWER_UP(3, SIM_SCGC3_SLCD); \                                   LCD_GCR = (LCD_GCR_CPSEL | LCD_GCR_RVEN | LCD_GCR_RVTRIM_MASK | LCD_GCR_LADJ_MASK | LCD_GCR_LCLK_0 | LCD_GCR_VSUPPLY_VLL3_EXT | LCD_GCR_SOURCE | LCD_GCR_DUTY_8BP | LCD_GCR_ALTDIV_NONE); \                                   LCD_PENL = 0xfffffffe; \                                   LCD_PENH = 0x0000ffff; \                                   LCD_BPENL = 0x00000000; \                                   LCD_BPENH = 0x0000ff00; \                                   fnClearSLCD(); \                                   WRITE_SLCD(43TO40, 0x08040201); \                                   WRITE_SLCD(47TO44, 0x80402010); \                                   LCD_GCR = (LCD_GCR_LCDEN | LCD_GCR_CPSEL | LCD_GCR_RVEN | LCD_GCR_RVTRIM_MASK | LCD_GCR_LADJ_MASK | LCD_GCR_LCLK_0 | LCD_GCR_VSUPPLY_VLL3_EXT | LCD_GCR_SOURCE | LCD_GCR_DUTY_8BP | LCD_GCR_ALTDIV_NONE)

 

You can convert this to assembler in a few minutes since it is just setting up registers as in your example code.

 

1) The clock must be configured (in MCG)

2) The SLCD controller must be clocked

3) The configuration include a sub-routine resetting all segment controls LCD_WF3TO0 to LCD_WF63TO60 because the controller doesn't clear these after a reset and the display after a reset otherwsie holds the same image as before the reset.

 

See also http://www.utasker.com/docs/uTasker/uTasker_SLCD.pdf and http://www.youtube.com/watch?v=nm2DmZv1rj8

 

Regards

 

Mark

 

在原帖中查看解决方案

0 项奖励
3 回复数
634 次查看
Andrewm
Contributor I

Try putting 2 NOPS between each assembly instruction, in case there is a pipelining issue.

-Andrew M

 

0 项奖励
634 次查看
derill03
Contributor I

nope does not work, im not sure if i am even doing this correctly to light the segment

0 项奖励
635 次查看
mjbcswitzerland
Specialist V

Hi

 

The segment LCD controller needs to be powered up and configured before it can be used.

 

The following initialisation is required:

 

                                   MCG_C1 |= MCG_C1_IRCLKEN; \                                   POWER_UP(3, SIM_SCGC3_SLCD); \                                   LCD_GCR = (LCD_GCR_CPSEL | LCD_GCR_RVEN | LCD_GCR_RVTRIM_MASK | LCD_GCR_LADJ_MASK | LCD_GCR_LCLK_0 | LCD_GCR_VSUPPLY_VLL3_EXT | LCD_GCR_SOURCE | LCD_GCR_DUTY_8BP | LCD_GCR_ALTDIV_NONE); \                                   LCD_PENL = 0xfffffffe; \                                   LCD_PENH = 0x0000ffff; \                                   LCD_BPENL = 0x00000000; \                                   LCD_BPENH = 0x0000ff00; \                                   fnClearSLCD(); \                                   WRITE_SLCD(43TO40, 0x08040201); \                                   WRITE_SLCD(47TO44, 0x80402010); \                                   LCD_GCR = (LCD_GCR_LCDEN | LCD_GCR_CPSEL | LCD_GCR_RVEN | LCD_GCR_RVTRIM_MASK | LCD_GCR_LADJ_MASK | LCD_GCR_LCLK_0 | LCD_GCR_VSUPPLY_VLL3_EXT | LCD_GCR_SOURCE | LCD_GCR_DUTY_8BP | LCD_GCR_ALTDIV_NONE)

 

You can convert this to assembler in a few minutes since it is just setting up registers as in your example code.

 

1) The clock must be configured (in MCG)

2) The SLCD controller must be clocked

3) The configuration include a sub-routine resetting all segment controls LCD_WF3TO0 to LCD_WF63TO60 because the controller doesn't clear these after a reset and the display after a reset otherwsie holds the same image as before the reset.

 

See also http://www.utasker.com/docs/uTasker/uTasker_SLCD.pdf and http://www.youtube.com/watch?v=nm2DmZv1rj8

 

Regards

 

Mark

 

0 项奖励