完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
第一期硬件试验部分 第7课系统时钟和串口试验 当中有这样一段代码 /* 判断是S3C2410还是S3C2440 */
if ((GSTATUS1 == 0x32410000) || (GSTATUS1 == 0x32410002)) { MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } else { MPLLCON = S3C2440_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } 可是查找2440的芯片手册第308页显示GSTATUS1的初始状态是0X32440001 在这个试验中我没有发现在哪里给GSTATUS1赋过值 所以我的疑问是,GSTATUS1的值到底是那个? |
|
相关推荐
4个回答
|
|
GSTATUS1这个寄出器里面是存储芯片ID的。根据这段代码可以知道2410的 GSTATUS1 值为0x32410000 或者0x32410002。否则就认为是 2440的。每个芯片都有自己对于的值。根据这个寄存器的值去判断芯片,当然你也可以反过来。如:
if ((GSTATUS1 == 0x32410001) ) { MPLLCON = S3C2440_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } else { MPLLCON = S3C2410_MPLL_200MHZ; /* 现在,FCLK=200MHz,HCLK=100MHz,PCLK=50MHz */ } |
|
|
|
好的明白
另一个问题:《04从0实现UBOOT_详细剖析》第1.1节 void clear_bss(void) { extern int __bss_start, __bss_end; int *p = &__bss_start; for (; p < &__bss_end; p++) *p = 0; } 这里面extern int __bss_start, __bss_end; 是在外部定义的 可是只有在boot.lds文件中有 __bss_start = .; .bss : { *(.bss) *(COMMON) } __bss_end = .; 我的问题是以前我做单片机的时候如果一个文件要用到另一个文件中定义的变量,必须包含这个变量所在的头文件,可是这里也没有包含头文件,怎么就知道extern int __bss_start, __bss_end;是在boot.lds中呢? |
|
|
|
如果包含头文件还要 extern 干啥
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
197个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2160 浏览 6 评论
1968 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4523 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 11:06 , Processed in 0.665831 second(s), Total 82, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号