当前位置:  编程技术>移动开发
本页文章导读:
    ▪AM335X DDR 三 调试总结        AM335X DDR 3 调试总结Author:DriverMonkey phone:13410905075 mail:bookworepeng@hotmail.com QQ:196568501 因为开发上的用的是DDR2 而我们项目中用的是DDR3,所以需要我们进行修改 1. 刚开始调试的时候按照TI FAE 给的.........
    ▪ shouldAutorotateToInterfaceOrientation 不触发或者不执行的有关问题 及旋转过程中各方法的作用        shouldAutorotateToInterfaceOrientation 不触发或者不执行的问题 及旋转过程中各方法的作用 原文连接为:http://blog.sina.com.cn/s/blog_6c9f384f0101538v.html 通过网上查资料 在cocochina上找到了答案   搞定 .........
    ▪ 在Nexus 4下恢复google服务       在Nexus 4上恢复google服务上一篇介绍编译Android4.2的文章中提到在新编出来的系统中Google Service app都没有了,这并不是我们少加了什么参数或者忘编了什么东西,而是这些google自有的app和服务都.........

[1]AM335X DDR 三 调试总结
    来源: 互联网  发布时间: 2014-02-18
AM335X DDR 3 调试总结

Author:DriverMonkey

phone:13410905075

mail:bookworepeng@hotmail.com

QQ:196568501


因为开发上的用的是DDR2 而我们项目中用的是DDR3,所以需要我们进行修改

1. 刚开始调试的时候按照TI FAE 给的文档调试 DDR3(文档名:DDR3 Software Leveling and Registers Configuration.pdf 作者:garry)

     但是一直有问题,卡在了用CCS5 运行 DDR3_slave_ratio_search_auto.out 这个软件的时候 老是进入了死循环

2. 继续找资料,最后在github 上找到了一个用DDR3例子

3. 移植例子,系统起来

以下是我移植的代码:

#define DDR3_EMIF_READ_LATENCY  0x100006 	   /* Enable Dynamic Power Down */
#define DDR3_EMIF_TIM1			0x0888A39B
#define DDR3_EMIF_TIM2			0x26337FDA
#define DDR3_EMIF_TIM3			0x501F830F
#define DDR3_EMIF_SDCFG 		0x61C04AB2
#define DDR3_EMIF_SDREF 		0x0000093B
#define DDR3_ZQ_CFG 			0x50074BE4
#define DDR3_DLL_LOCK_DIFF		0x1
#define DDR3_RATIO				0x40
#define DDR3_INVERT_CLKOUT		0x1
#define DDR3_RD_DQS 			0x3B
#define DDR3_WR_DQS 			0x85
#define DDR3_PHY_WR_DATA		0xC1
#define DDR3_PHY_FIFO_WE		0x100
#define DDR3_IOCTRL_VALUE		0x18B

/* Micron ???? on 1.5 and later EVMs */
#define DDR3_EMIF_TIM2_EVM		0x26517FDA
#define DDR3_EMIF_TIM3_EVM		0x501F851F
#define DDR3_RD_DQS_EVM 		0x3A
#define DDR3_WR_DQS_EVM 		0x0CD
#define DDR3_PHY_FIFO_WE_EVM	0x10B
#define DDR3_PHY_WR_DATA_EVM	0x106

#define DATA1_RD_DQS_SLAVE_RATIO_0		(DDR_PHY_BASE_ADDR + 0x16C)
#define EMIF0_0_ZQ_CONFIG				(EMIF4_0_CFG_BASE + 0xC8)
#define DATA1_WR_DQS_SLAVE_RATIO_0      (DDR_PHY_BASE_ADDR + 0x180)
#define DATA1_FIFO_WE_SLAVE_RATIO_0 	(DDR_PHY_BASE_ADDR + 0x1AC)
#define DATA1_WR_DATA_SLAVE_RATIO_0     (DDR_PHY_BASE_ADDR + 0x1C4)
#define MDDR_SEL_DDR2           0xefffffff              /* IOs set for DDR2-STL Mode */
#define CKE_NORMAL_OP           0x00000001              /* Normal Op:CKE controlled by EMIF */


static void config_emif_ddr3(void)
{        
	/*Program EMIF0 CFG Registers*/
	writel(DDR3_EMIF_READ_LATENCY, EMIF4_0_DDR_PHY_CTRL_1);
	writel(DDR3_EMIF_READ_LATENCY, EMIF4_0_DDR_PHY_CTRL_1_SHADOW);
	writel(DDR3_EMIF_READ_LATENCY, EMIF4_0_DDR_PHY_CTRL_2);
	writel(DDR3_EMIF_TIM1, EMIF4_0_SDRAM_TIM_1);
	writel(DDR3_EMIF_TIM1, EMIF4_0_SDRAM_TIM_1_SHADOW);
	writel(DDR3_EMIF_TIM2, EMIF4_0_SDRAM_TIM_2);
	writel(DDR3_EMIF_TIM2, EMIF4_0_SDRAM_TIM_2_SHADOW);
	writel(DDR3_EMIF_TIM3, EMIF4_0_SDRAM_TIM_3);
	writel(DDR3_EMIF_TIM3, EMIF4_0_SDRAM_TIM_3_SHADOW);


	writel(DDR3_EMIF_SDREF, EMIF4_0_SDRAM_REF_CTRL);
	writel(DDR3_EMIF_SDREF, EMIF4_0_SDRAM_REF_CTRL_SHADOW);
	writel(DDR3_ZQ_CFG, EMIF0_0_ZQ_CONFIG);

	writel(DDR3_EMIF_SDCFG, EMIF4_0_SDRAM_CONFIG);
 
 }

#ifndef PRCM_MOD_EN
#define PRCM_MOD_EN		0x2
#endif

void enable_ddr3_clocks(void)
{
	/* Enable the  EMIF_FW Functional clock */
	writel(PRCM_MOD_EN, CM_PER_EMIF_FW_CLKCTRL);
	/* Enable EMIF0 Clock */
	writel(PRCM_MOD_EN, CM_PER_EMIF_CLKCTRL);
	/* Poll if module is functional */
	while ((readl(CM_PER_EMIF_CLKCTRL)) != PRCM_MOD_EN);
}

static void phy_config_cmd(void)
{
	writel(DDR3_RATIO, CMD0_CTRL_SLAVE_RATIO_0);
	writel(DDR3_INVERT_CLKOUT, CMD0_INVERT_CLKOUT_0);
	writel(DDR3_RATIO, CMD1_CTRL_SLAVE_RATIO_0);
	writel(DDR3_INVERT_CLKOUT, CMD1_INVERT_CLKOUT_0);
	writel(DDR3_RATIO, CMD2_CTRL_SLAVE_RATIO_0);
	writel(DDR3_INVERT_CLKOUT, CMD2_INVERT_CLKOUT_0);
}

static void phy_config_data(void)
{

	writel(DDR3_RD_DQS, DATA0_RD_DQS_SLAVE_RATIO_0);
	writel(DDR3_WR_DQS, DATA0_WR_DQS_SLAVE_RATIO_0);
	writel(DDR3_PHY_FIFO_WE, DATA0_FIFO_WE_SLAVE_RATIO_0);
	writel(DDR3_PHY_WR_DATA, DATA0_WR_DATA_SLAVE_RATIO_0);

	writel(DDR3_RD_DQS, DATA1_RD_DQS_SLAVE_RATIO_0);
	writel(DDR3_WR_DQS, DATA1_WR_DQS_SLAVE_RATIO_0);
	writel(DDR3_PHY_FIFO_WE, DATA1_FIFO_WE_SLAVE_RATIO_0);
	writel(DDR3_PHY_WR_DATA, DATA1_WR_DATA_SLAVE_RATIO_0);
}

static void config_am335x_ddr3(void)
{
	enable_ddr3_clocks();

	config_vtp(); 
	phy_config_cmd();
	phy_config_data();

	/* set IO control registers */
	writel(DDR3_IOCTRL_VALUE, DDR_CMD0_IOCTRL);
	writel(DDR3_IOCTRL_VALUE, DDR_CMD1_IOCTRL);
	writel(DDR3_IOCTRL_VALUE, DDR_CMD2_IOCTRL);
	writel(DDR3_IOCTRL_VALUE, DDR_DATA0_IOCTRL);
	writel(DDR3_IOCTRL_VALUE, DDR_DATA1_IOCTRL);

	/* IOs set for DDR3 */
	writel(readl(DDR_IO_CTRL) & MDDR_SEL_DDR2, DDR_IO_CTRL);
	/* CKE controlled by EMIF/DDR_PHY */
	writel(readl(DDR_CKE_CTRL) | CKE_NORMAL_OP, DDR_CKE_CTRL);

	config_emif_ddr3();
 
}



    
[2] shouldAutorotateToInterfaceOrientation 不触发或者不执行的有关问题 及旋转过程中各方法的作用
    来源: 互联网  发布时间: 2014-02-18
shouldAutorotateToInterfaceOrientation 不触发或者不执行的问题 及旋转过程中各方法的作用
原文连接为:http://blog.sina.com.cn/s/blog_6c9f384f0101538v.html

 今天遇到一个很郁闷的问题:新做的ipad程序中,界面居然在未作任何配置的情况下不支持旋转了。

通过在uitabbarcontroller的旋转事件添加nslog发现,其完全没有被触发。

通过网上查资料 在cocochina上找到了答案

   是位hanzengbo 的朋友的解答 原文如下

“昨天忙乎了一天,没搞定。今天早上终于搞定了。贴出来希望能对遇到相似问题的哥们有用。前面搜到的答案都说是uitabbarcontroller的问题。但是我重新写了个小程序,也使用了tabbar这个控件,发现每个窗体也是能触发旋转事件的。昨天在tabbarcontroller这个地方弄了一天,一直没有弄成功。但是有一点可以肯定,就是旋转事件是被父窗体劫持了,从而使得tabbar中的每个窗体不能接受到旋转事件。今天来重新看了一下程序,发现问题在于我的程序开始有个启动窗体,在delegate文件中,我把tabbarcontroller的view加进了这个启动窗体,所以整个程序的父窗体就是这个启动窗体。我在启动窗体的旋转事件中打印log信息,能够成功。为了让tabbar的每个view能够响应旋转事件,就只能让他们成为单独的父窗体。所以我修改启动窗体代码,首先在delegate中addsubview 启动窗体,然后addsubview tabbar的窗体,在启动画面显示一定时间后,就把启动窗体从window中remove掉,这样下面的tabbar窗体就显示出来了,而且tabbar的窗体成为了父窗体,能够正常接受到旋转时间。”

 

和我一样,我也有登录窗 嘿嘿 太巧了 

[[[self.view.superview subviews] objectAtIndex:0] removeFromSuperView];

搞定 。

界面正常了 。ios要学的东西真很多,为自己鼓劲 特此记录


注:

 

要翻转的时候,首先响应的方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return YES则支持翻转,NO则不支持。

紧接着

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

被调用。这个方法是发生在翻转开始之前。一般用来禁用某些控件或者停止某些正在进行的活动,比如停止视频播放。
再来是

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

这个方法发生在翻转的过程中,一般用来定制翻转后各个控件的位置、大小等。可以用另外两个方法来代替:willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:   和  willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

最后调用的是

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

这个方法发生在整个翻转完成之后。一般用来重新启用某些控件或者继续翻转之前被暂停的活动,比如继续视频播放。



 

UIViewController没有随着设备一起旋转的原因   转载
引用地址:http://blog.sina.com.cn/s/blog_6de189920101266h.html
对于iPhone app,UIViewController类提供了基本的视图管理模式。当设备改变方向的时候view controller的视图会自动随之旋转的。如果视图和子视图的autoresizing属性设置是对的,这时候视图又没有随着设备一起旋转,可能是以下的原因:
转载▼

1.view controller没有完成代理方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

也要实现了shouldAutorotateToInterfaceOrientation方法,同时shouldAutorotateToInterfaceOrientation方法要返回YES来支持所有的旋转方向


2.view controller的UIView属性嵌入在UIWindow中,并非是一个附加的view controller

你可能会发现shouldAutorotateToInterfaceOrientation方法只会在view controller启动的时候被调用,不会因为设置的旋转而在被调用。这是因为view controller束缚着他们所管理的视图,view controller是用来处理时间的响应链的一部分。view controller是从UIResponder继承而来,同时他被插入到他所管理的视图和他的superview之间。因此,通常的做法是在你的app中有一个主view controller来作为响应链的一部分。通常来说会添加一个主view controller,例如UINavigationController, UITabBarController或者UIViewController到UIWindow上。

例如

[myWindow addSubview:primaryViewController.view]; 

如果你添加了另外一个view controller的UIView属性到UIWindow(anotherController和主view controller在同一个等级上)

[myWindow addSubview:anotherController.view];

anotherController将不会接受旋转事件,只有第一个view controller(primaryViewController)会接受旋转事件。


3.你添加了view controller的UIView属性到UIWindow作为subview,但是过早的release它。

UIWindow会retain视图,而不是view controller。你不能过早的release他。在UIApplicationDelegate子类中定义他为retain属性。


4.在UITabBarController或者UINavigationController中的子view controller没有对同一方向的支持。

为了确保所有的子view controller旋转正确,你的每一个view controller,每一个tab或者额navigation都要完成shouldAutorotateToInterfaceOrientation,而且必须支持对于同一方向的旋转,也就是说对于同一方向的位置要返回为YES。


5.重写-(id)init:或者 -(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 方法的时候没有调用super。

对于对象的初始化,在你的view controller的init或者initWithNibName方法中必须要调用super。

/////////////

音频视频播放:http://blog.sina.com.cn/s/blog_6f1a34260100tlvx.html

////////转载

 iphone提供了优秀的重力加速计,能够很灵敏地感应到手机的屏幕状态。在我们开发iphone应用时,为了提高用户体验,会来监听屏幕的当前状态。
对于UIViewController来说,提供了好几种方法。

    最简单的就是我们可以使用Interface Builder这个工具来帮助我们实现简单的屏幕界面适配,只需要在IB 中的Size Insepector 中通过对Autosizing 的
设置来实现。但这只能做到简单界面的实现,如果界面比较复杂,可能就需要我们通过代码来实现。

    第二个我们可以通过对 willAnimateRotationToInterfaceOrientation:duration:这个方法的重写来配置我们的自动旋转。

    第三,你也可以通过对willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:与willAnimateSencondHalfOfRotationToInterfaceOrientation:duration:两个方法的重写来更加精细地配置我们的自动旋转视图。特别需要注意 的就是前一个方法在执行时,此时的UIInterfaceOrientation仍然是旋转前的原有值,只有后一个方法在执行时UIInterfaceOrientation才是屏幕旋转后的值。


    
[3] 在Nexus 4下恢复google服务
    来源: 互联网  发布时间: 2014-02-18
在Nexus 4上恢复google服务

上一篇介绍编译Android4.2的文章中提到在新编出来的系统中Google Service app都没有了,这并不是我们少加了什么参数或者忘编了什么东西,而是这些google自有的app和服务都是不开放的,并非包含在Android代码里。参考“

Q:How can I get access to the Google apps for Android, such as Maps?

A:The Google apps for Android, such as YouTube, Google Maps and Navigation, Gmail, and so on are Google properties that are not part of Android, and are licensed separately. Contact android-partnerships@google.com for inquiries related to those apps.”

所以我们编出来的系统或者其他第三方ROM默认都没有Google app,我们得自己想办法恢复。其实很简单!

网上有老外打包好的google服务包,包括apk、framework层的jar包和运行时依赖的.so库等文件,下载这样的Google服务包,使用他们提供的recovery文件恢复到手机即可。

第一步:下载recovery程序和google app包:

1.可以从这里下载最新的google app包,Nexus4对应的地址是:http://clockworkmod.com/rommanager/developers/mako?name=Google%20Nexus%204,选择最下面的Google apps,下载最新的压缩包:gapps-jb-20121212-signed.zip。(注:这个网站还有很多其他型号手机的ROM下载,基本上一线厂商的明星手机都包括了,但是我找了半天居然没发现SONY。。。)

2.下载recovery程序:http://download2.clockworkmod.com/recoveries/recovery-clockwork-6.0.2.3-mako.img


第二步:拷贝google app包到手机sd卡,例如文件名叫gapps-jb-20130301-signed.zip

重启手机进入bootloader模式,执行:

1.fastboot flash recovery recovery.img (recovery.img就是自己刚刚下载的recovery文件,可能会叫其它名字)

sending 'recovery' (7628 KB)...
OKAY [  0.478s]
writing 'recovery'...
OKAY [  0.393s]
finished. total time: 0.872s

2.进入recovery模式,选择update from sdcard, 然后选择“0”,进入sdcard选择存放gapps-jb-20130301-signed.zip的目录,选中该文件执行安装即可(界面上具体的名字和命令名我记不清了,按提示操作应该就行,这个过程中间可以选择wipe cache和wipe userdate,反正我觉得无所谓做不做)。

至此已经基本完成。

但是进入目录后发现gmail、map等程序还是木有,没办法,人家提供的google app.zip里没有这些apk,但是现在已经可以连上google player了,就手动从market上下载需要用到的程序吧。不知道还有没有更好的办法?




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3