LED寄存器读写的问题~

发布于 2022-09-19 12:37:30 字数 1254 浏览 13 评论 0

BOARD:S3C2410_V4          KERNEL:KERNEL-2.6.8.1

LED寄存器读写的问题
pREG = ioremap(0x56000010, 0x20);           //GPBCON 地址56000010
printk("Virtual addr base = 0x%lx\n", (unsigned long)pREG);
tmp = * (volatile unsigned long *)pREG;
printk("GPBCON = 0x%lx\n", tmp);
tmp = * (volatile unsigned long *)(pREG + 1);
printk("GPBDAT = 0x%lx\n", tmp);
printk("Seting LED Test Driver...\n");
//GPB0是GPBCON的最底两位,led接GPB0  00:IN 01:OUT
* (volatile unsigned long *)pREG = 0x155555;//0101010101010101010101 GPBCON共22位
* (volatile unsigned long *)(pREG + 1) = 0xfff;
tmp = * (volatile unsigned long *)pREG;
printk("GPBCON = 0x%lx\n", tmp);
tmp = * (volatile unsigned long *)(pREG + 1);
printk("GPBDAT = 0x%lx\n", tmp);
printk("LED Test Driver initiated.\n");

此模块insmod时就将 LED熄灭了, 可我把底2位值改为,00时也没见它再亮啊.
问题:pREG = 0x155555 它的寄存器位设置就是转化2进制对位的设置 10101010101010101吧?
问题:GPBCON 有没有大小端的说法? 我要把它的状态改变是否把最底2位变为00 就可以把灯再点亮呢?

基础差.含涵~

[ 本帖最后由 jn200002 于 2008-6-20 14:59 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灵芸 2022-09-26 12:37:30

jn兄寫的好亂啊

給你摘了一段Atmel的LED測試程序,你參考一下,如果需要完整版聯系我

  1. unsigned char LED_Toggle(unsigned int led)
  2. {
  3. #ifdef PINS_LEDS
  4.     // Check if LED exists
  5.     if (led >= numLeds) {
  6.         return 0;
  7.     }
  8.     // Toggle LED
  9.     if (PIO_GetOutputDataStatus(&pinsLeds[led])) {
  10.         PIO_Clear(&pinsLeds[led]);
  11.     }
  12.     else {
  13.         PIO_Set(&pinsLeds[led]);
  14.     }
  15.     return 1;
  16. #else
  17.     return 0;
  18. #endif
  19. }

复制代码

  1. int main()
  2. {
  3.     PIO_Configure(pPins, PIO_LISTSIZE(pPins));
  4.     DBGU_Configure(DBGU_STANDARD, 115200, BOARD_MCK);
  5.     printf("-- Getting Started Project 1.4 --\n\r");
  6.     printf("Board : %s, Chip ID : 0x%08X\n\r", BOARD_NAME, AT91C_BASE_DBGU->DBGU_CIDR);
  7.     // Configuration
  8.     ConfigurePit();
  9.     ConfigureTc();
  10.     ConfigureButtons();
  11.     ConfigureLeds();
  12.    
  13.     // Main loop
  14.     while (1) {
  15.         // Wait for LED to be active
  16.         while (!pLedStates[0]);
  17.         // Toggle LED state if active
  18.         if (pLedStates[0]) {
  19.             LED_Toggle(0);
  20.             printf("1 ");
  21.         }
  22.         // Wait for 500ms
  23.         Wait(500);
  24.     }
  25. }

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文