From mboxrd@z Thu Jan 1 00:00:00 1970 From: "jeremy" To: Subject: Re: [ECOS] HAL register write problem Date: Tue, 23 Jan 2001 16:16:00 -0000 Message-id: <004201c0859b$46d0fba0$7c6509c0@viatech.com> X-SW-Source: 2001-01/msg00389.html I got it done! All registers should cast like this: ((volatile cyg_uint8 *) (XXX + 0xXX)) ((volatile cyg_uint8 *) (XXX + 0xXX)) ((volatile cyg_uint8 *) (XXX + 0xXX)) ((volatile cyg_uint16 *) (XXX + 0xXX)) I only parenthesized the 16 bit register, and that was the problem. In original pid codes, all registers are 8-bits, so it ok if all defined this way: ((volatile cyg_uint8 *) XXX + 0xXX) ... Is it because of the alignment? Anyway, I should have tried this earlier :-) Thanks to all helped me!! jeremy jeremy wrote: > > My platform is Samsung KS32C50100, which operates in big-endian mode. > I got some problem with writing to register using HAL_WRITE function. > For example, in plf_stub.c where I put the UART initialization function > in, > Here I write some initialize value to UART control registers, > HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_UART_UTXBUF, 0x0); > HAL_WRITE_UINT8 (CYG_DEVICE_SERIAL_RS232_UART_URXBUF, 0x0); > HAL_WRITE_UINT16(CYG_DEVICE_SERIAL_RS232_UART_UBRDIV, 0x280); > > The first two lines for writing 8-bits registers works fine. But the > last line doesn't write > anything into the 16-bits register. I defined that 16-bits register > like this in the first part > of the program: > #define CYG_DEVICE_SERIAL_RS232_UART_UBRDIV \ > ((volatile cyg_uint16 *) CYG_DEVICE_SERIAL_RS232_UART_BASE + 0x14) >>At a guess, you were probably intending to write >#define CYG_DEVICE_SERIAL_RS232_UART_UBRDIV \ ((volatile cyg_uint16 *) (CYG_DEVICE_SERIAL_RS232_UART_BASE + 0x14)) >>because adding 0x14 to something cast to a pointer to a 16-bit type will >>increment it by 2*0x14=0x28 bytes. >>Jifl -- >>Red Hat, Rustat House, Clifton Road, Cambridge, UK. Tel: +44 (1223) 271062 >>Un cheval, pas du glue. Pas du cheval, beaucoup du glue. || Opinions