From mboxrd@z Thu Jan 1 00:00:00 1970 From: "jeremy" To: Subject: Re: [ECOS] HAL register write problem Date: Fri, 19 Jan 2001 19:37:00 -0000 Message-id: <003e01c0828f$42da2260$7c6509c0@viatech.com> References: <000e01c08183$65c3bf00$7c6509c0@viatech.com> <20010119103729.A11030@visi.com> X-SW-Source: 2001-01/msg00352.html Thanks. I tried it, but still didn't work. And I found a strange thing. I wrote a simple program like this: #include int main(void) { HAL_WRITE_UINT8(0x3ffe014,0x6); HAL_WRITE_UINT8(0x3ff5000,0x8); HAL_WRITE_UINT32(0x3ff5004,0x12345678); HAL_WRITE_UINT16(0x3ff4000,0x123); return 0; } After load and run it (i got a gdb-stub to do it), I used JEENI to check the registers, and all these registers are written correctly. But if I put the same code in plf_stub.c (which is compiled to a ROM image), only HAL_WRITE_UNIT8 works after power-on. The only difference is, the test program is compiled using packages from "default" template and is start-up from RAM, but the stub image is compiled using "stub" template. One has kernal the other doesn't. Do I need to add any package when compiling stub in order to use 16-bit and 32-bit HAL_WRITE ? Thanks a lot!! Jeremy ----- Original Message ----- From: "Grant Edwards" To: "jeremy" Cc: Sent: Friday, January 19, 2001 8:37 AM Subject: Re: [ECOS] HAL register write problem > On Thu, Jan 18, 2001 at 11:17:55AM -0800, jeremy wrote: > > > #define CYG_DEVICE_SERIAL_RS232_UART_UBRDIV \ > > ((volatile cyg_uint16 *) CYG_DEVICE_SERIAL_RS232_UART_BASE + 0x14) > > Are you sure that you want > ((volatile cyg_uint16 *)XXX + 0x14) > and not > ((volatile cyg_uint16 *)(XXX+0x14)) > > I've been bitten by that one... > > -- > Grant Edwards > grante@visi.com > 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==mine