网站分站加盟,建网站卖广告,网站编程设计如何写备注,西安知名网络推广公司RK3288启动后有三种模式#xff0c;可以分别进行操作。 第一种是normal也就是正常的启动模式。这个模式无法刷固件。一般板子通电就是这个模式 第二种是loader模式。就是刷固件模式。这个模式可以刷各种image。按住recover按键再通电#xff0c;通过uboot的检测进入这个模式 …RK3288启动后有三种模式可以分别进行操作。 第一种是normal也就是正常的启动模式。这个模式无法刷固件。一般板子通电就是这个模式 第二种是loader模式。就是刷固件模式。这个模式可以刷各种image。按住recover按键再通电通过uboot的检测进入这个模式 第三种是MASKROM模式。这种模式用于拯救砖头机器。比如bootloader无法启动。无法进入loader正常下载。需要通过在板子上找对应的T13 C155 焊点短接后通电进入MASKROM模式这些点需要问板子的生产商。 也可参考链接http://www.t-firefly.com/doc/product/info/287.html 对于模式的检测是在uboot里面进行的。如果uboot执行有问题。没法进入loader模式就需要进入maskrom模式。检测的代码在uboot的board_late_init-board_fbt_preboot-board_fbt_key_pressed-checkKey() 根据按键的结果确定接下来执行哪一步。checkKey通过配置数据使用GetPortState函数得到是否有按键。 配置的内容如下 RockusbKeyInit中 key-type KEY_AD;key-key.adc.index KEY_ADC_CN;key-key.adc.keyValueLow 0;key-key.adc.keyValueHigh 30;key-key.adc.data SARADC_BASE;key-key.adc.stas SARADC_BASE4;key-key.adc.ctrl SARADC_BASE8; #define SARADC_BASE RKIO_SARADC_PHYS 在io-rk3288.h中 #define RKIO_SARADC_PHYS 0xFF100000#define RKIO_SARADC_SIZE SZ_64K 接下来就是到芯片手册中看资料了 http://rockchip.fr/RK3288%20TRM/ http://wiki.t-firefly.com/index.php/Firefly-RK3288/RK3288_TRM 三通道的模拟信号转数字信号 Rockchip RK3288TRM V1.0 Technical Reference Manual.pdf 可以看到地址FF100000是SAR-ADC的基地址 内存地址从0-FF100000 16M-4GB大小 key-key.adc.index 1; key-key.adc.keyValueLow 0; key-key.adc.keyValueHigh 30; key-key.adc.data SARADC_BASE; key-key.adc.stas SARADC_BASE4; key-key.adc.ctrl SARADC_BASE8;
typedef struct
{ uint32 index; uint32 keyValueLow; uint32 keyValueHigh; uint32 data; uint32 stas; uint32 ctrl;
}adc_conf; 对照SAR-ADC源码进行解析 for(tt 0; tt 10; tt)
{ // read special gpio port value. uint32 value; uint32 timeout 0; /* 控制寄存器清零 初始化状态 */ write_XDATA32( adc-ctrl, 0); DRVDelayUs(1); /* 写入 0x0028| 10x29 第0 3 5 bit为1 0:2为001 表示选择输入源 Input source 1 (SARADC_AIN[1]) 第3bit为1 表示ADC电源启动 第5bit为1 表示开启中断 */ write_XDATA32( adc-ctrl, 0x0028|(adc-index)); DRVDelayUs(1); do { /* 接下来读取控制寄存器如果第6bit为0那么持续读取直到第6bit为1 6bit是中断状态位当转换结束以后会被设置为1设置为0表示清除中断 */ value read_XDATA32(adc-ctrl); timeout; } while((value0x40) 0); /* 前面的操作就是设置好输入源开启中断这些并开始转换。 然后等待转换结束 使用read_XDATA32(adc-data)读取数据 adc-data得到的是最后一次AD转换的值 */ value read_XDATA32(adc-data); //printf(adc key %d\n,value); //DRVDelayUs(1000); /* 如果最后一次AD转化的值处于keyValueLow和keyValueHigh之间。 表明电源被接通。计数器1 keyValueLow和keyValueHigh控制着不同的按键类型 */ if( valueadc-keyValueHigh valueadc-keyValueLow) hCnt;
}
/*
清空初始化状态
如果10次里面有8次接通那么说明电源按钮被按下。返回1
*/
write_XDATA32( adc-ctrl, 0);
return (hCnt8) 总之根据keyValueHigh和keyValueLow检测完不同的按键后就根据这些按键做对应的操作。比如进入loader模式还是normal模式 如果进入的是rockusb那么执行 do_rockusb(NULL, 1, 0, NULL) 参考复制自https://blog.csdn.net/groundhappy/article/details/56280576转载于:https://www.cnblogs.com/debruyne/p/9225730.html