hello
I have written a GPIO driver for xilinx-zedboard attached below. but when I
try to write in register of GPIO that gave me SDK it doesn't work.
Does RTEMS use the same register address as SDK?
Is there any memory mapping in RTEMS?
Or is there any extra thing that I have to do to access the register?
regards,
Mojtaba
#define RTEMS_STATUS_CHECKS_USE_PRINTK
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <rtems.h>
#include <rtems/status-checks.h>
#include <bsp.h>
#include <rtems/libio.h>
#include <bsp/LED.h>
struct LEDS {
char *name;
unsigned int mask;
bool readonly;
};
static const struct LEDS led[] = {
{
.name = "/dev/led",
.mask = LED_LED,
.readonly = false
},
};
rtems_device_driver led_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg){
printk("11111111111111111111");
rtems_status_code sc;
for (int i=0;i<sizeof(led)/sizeof(struct LEDS);i++) {
sc = rtems_io_register_name(led[i].name, major, i);
RTEMS_CHECK_SC(sc, "create LED device");
}
return RTEMS_SUCCESSFUL;
}
rtems_device_driver led_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg){
printk("22222222222222222222");
return RTEMS_SUCCESSFUL;
}
rtems_device_driver led_close(rtems_device_major_number major, rtems_device_minor_number minor, void *arg){
printk("33333333333333333333");
return RTEMS_SUCCESSFUL;
}
rtems_device_driver led_read(rtems_device_major_number major, rtems_device_minor_number minor, void *arg){
printk("44444444444444444444");
return RTEMS_SUCCESSFUL;
}
rtems_device_driver led_write(rtems_device_major_number major, rtems_device_minor_number minor, void *arg){
printk("55555555555555555555");
rtems_libio_rw_args_t *rw_args = (rtems_libio_rw_args_t *)arg;
printk("\nminor= %d arg= %d count= %u\n", minor, rw_args->buffer[0], rw_args->count);
LED_WRITE(0x41200004, 0);
LED_WRITE(0x41200000, 1);
return RTEMS_SUCCESSFUL;
}
#ifndef __LED_H_
#define __LED_H_
#define LED_BASE (0x41200000)
#define XGPIO_TRI_OFFSET (0x4)
#define XGPIO_DATA_OFFSET (0x0)
#define XGPIO_CHAN_OFFSET 8
#define LED_READ(reg) (*((volatile unsigned int *)(reg)))
#define LED_WRITE(reg, val) *((volatile unsigned int *)(reg)) = val
#ifdef __cplusplus
extern "C" {
#endif
rtems_device_driver led_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
rtems_device_driver led_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
rtems_device_driver led_close(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
rtems_device_driver led_read(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
rtems_device_driver led_write(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
#define LED_DRIVER_TABLE_ENTRY { led_initialize, led_open, led_close, led_read, led_write, NULL}
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* __LED_H_ */
_______________________________________________
users mailing list
[email protected]
http://lists.rtems.org/mailman/listinfo/users