-
O shit!
我该怎么发你附件? 难道重开一帖子?
高级回复中可以添加附件。
-
嗨嗨,哥儿几个,这里不是做广告的地方啊,
-
如果真有人炒货,那么怪ST有什么用?又不是ST让他们炒的,
-
GPIO的功耗基本不考虑的
低功耗的设计不应该在这里着眼
驱动能够分级控制一个设备的功耗
比把全部GPIO都关了还要有效一万倍
在GPIO做文章
就是看见芝麻 丢了西瓜
-
#include "ds1302.h"
#include "stcdelay.h"
#define CLOCK_HALT_MASK 0x80 //1000 0000
#define HALF_FULL_MODE_MASK 0x80 //1000 0000 12/24小时模式
#define AM_PM_MASK 0x20 //0010 0000
#define DISABLE_WRITE_PROTECT 0x00 //允许写入
#define ENABLE_WRITE_PROTECT 0x80 //禁止写入
void InitDS1302()
{
BYTE temp = 0;
/*********************************************************
At power-up, RST must be a logic 0 until VCC > 2.0V.
Also SCLK must be at a logic 0 when RST is driven to
a logic 1 state.
*******************************************************/
RST_PIN = 0;
DelayMS(10);
RST_PIN = 1;
SCLK_PIN = 0;
WriteSingleCmdByte(CONTROL, DISABLE_WRITE_PROTECT); //允许写
/********************************************************************************
In order to prevent accidental enabling, only a pattern of 1010 will enable
the trickle charger(TCS),
有备用电池,涓流充电用处不大
*********************************************************************************/
WriteSingleCmdByte(TRICKLE_CHARGE, 0x00); //不使用充电功能
temp = ReadSingleCmdByte(SECOND_READ);//读出,然后再写入
RESET_STATE_FLAG(temp, CLOCK_HALT_MASK);//清CLOCK HALT FLAG,以便可以正常启动
WriteSingleCmdByte(SECOND_WRITE, temp);
}
static void WriteSingleCmdByte(COMMANDBYTE cmd, BYTE Data)
{
RST_PIN = 0;
SCLK_PIN = 0;
RST_PIN = 1;
WriteOneByte(cmd);
WriteOneByte(Data);
RST_PIN = 0;
}
static BYTE ReadSingleCmdByte(COMMANDBYTE cmd)
{
BYTE Ret = 0;
RST_PIN = 0;
SCLK_PIN = 0;
RST_PIN = 1;
WriteOneByte(cmd);
Ret = ReadOneByte();
RST_PIN = 0;
return Ret;
}
static void WriteOneByte(BYTE byte)
{
BYTE i = 0;
for(i = 0; i < 8; i++)
{
IO_PIN = TEST_BIT(byte, i);
SCLK_PIN = 1;
NOP();
NOP();
NOP();
SCLK_PIN = 0;
}
}
static BYTE ReadOneByte()
{
BYTE i = 0;
BYTE Ret = 0;
/*******************************************************************
Note that the first data bit to be transmitted occurs on the first falling
edge after the last bit of the command byte is written.
所以进入循环后马上读取IO数据
*******************************************************************/
for(i = 0; i < 8; i++)
{
if(IO_PIN)
{
SET_BIT(Ret, i);
}
SCLK_PIN = 1;
NOP();
NOP();
NOP();
SCLK_PIN = 0;
}
return Ret;
}
void SetDateTime(const BCDDATETIME* pBCDDateTime)
{
BYTE i = 0;
const BYTE* p = (BYTE*)pBCDDateTime;
RST_PIN = 0;
SCLK_PIN = 0;
RST_PIN = 1;
WriteOneByte(CLOCK_BURST_WRITE);
for(i = 0; i < 8; i++)
{
WriteOneByte(*p);
p++;
}
RST_PIN = 0;
}
void GetDateTime(BCDDATETIME* pBCDDateTime)
{
BYTE i = 0;
BYTE* p = (BYTE*)pBCDDateTime;
RST_PIN = 0;
SCLK_PIN = 0;
RST_PIN = 1;
WriteOneByte(CLOCK_BURST_READ);
/*******************************************************************
Note that the first data bit to be transmitted occurs on the first falling
edge after the last bit of the command byte is written.
所以进入循环后马上读取IO数据
*******************************************************************/
for(i = 0; i < 7; i++) //最后一个字节是写保护字节,不需要读取
{
*p = ReadOneByte();
p++;
}
RST_PIN = 0;
}
复制代码
-
裸机的。
基于操作系统就不用管这么多了,操作系统已经进行实现,只需调用相关函数,注册就可以了,不过个人还是比较喜欢裸机的。这样对我个人对整个驱动程序的了解更加深入,才能做到真正的跟硬件打交到。
-
MAX3232不是只是用于串口通信的吗
-
只要连着机器调试把程序启动起来,程序就运行如飞,
连着机器调,应该是RAM里面运行,
脱机运行可能是在RAM 运行。
建议按照楼上所说,测试下。
-
期待解决方法啊~~
-
赞一个 kyzf
-
娘滴,本来2楼应该是我,可是我这边没有刷上服务器,RI!看楼主的经历很丰富,但是有一个问题,你主要对那一方面比较精,这是最关键滴。念大学最怕读那种万金油专业,找工作更是你必须完全展现自己的长处才中,如果什么都懂什么都不精,想实现月薪10K或者以上那真的不是一般的难哦!
-
我用的wince 6.0的。
-
做好了,共享一下,大伙会感谢你地
-
#define EV_RXCHAR 0x0001 // Any Character received
#define EV_RXFLAG 0x0002 // Received certain character
#define EV_TXEMPTY 0x0004 // Transmitt Queue Empty
#define EV_CTS 0x0008 // CTS changed state
#define EV_DSR 0x0010 // DSR changed state
#define EV_RLSD 0x0020 // RLSD changed state
#define EV_BREAK 0x0040 // BREAK received
#define EV_ERR 0x0080 // Line status error occurred
#define EV_RING 0x0100 // Ring signal detected
#define EV_PERR 0x0200 // Printer error occured
#define EV_RX80FULL 0x0400 // Receive buffer is 80 percent full
#define EV_EVENT1 0x0800 // Provider specific event 1
#define EV_EVENT2 0x1000 // Provider specific event 2
复制代码
看你的打印信息,出现的事件分别是以下事件:
EV_ERR, EV_BREAK, EV_RXFLAG 80h 40h 2h
我们再来看看cserpdd.cpp以及pdds3c2440_ser.cpp源代码
我们可以看到这3个事件都是在CPdd2440Uart::GetLineStatus()中调用EventCallback()发送出去的..
而唯一能让GetLineStatus()函数反复调用的就是下面这个函数了
ULONG CPdd2440Uart::ReceiveInterruptHandler(PUCHAR pRxBuffer,ULONG *pBufflen)
{
DEBUGMSG(ZONE_THREAD|ZONE_READ,(TEXT("+CPdd2440Uart::ReceiveInterruptHandler pRxBuffer=%x,*pBufflen=%x\r\n"),
pRxBuffer,pBufflen!=NULL?*pBufflen:0));
DWORD dwBytesDropped = 0;
if (pRxBuffer && pBufflen ) {
DWORD dwBytesStored = 0 ;
DWORD dwRoomLeft = *pBufflen;
m_bReceivedCanceled = FALSE;
m_HardwareLock.Lock();
while (dwRoomLeft && !m_bReceivedCanceled) {
ULONG ulUFSTATE = m_pReg2440Uart->Read_UFSTAT();
DWORD dwNumRxInFifo = (ulUFSTATE & (0x3f
-
劝楼主还是看电子档比较实在
-
100000000?这个数了太大了吧(或太小,因为可能变成负数)!
i是什么类型的?
-
引用 2 楼 veabol 的回复:
如果不想使用常用的U盘形式,就自己开发一个USB的驱动,接收PC的命令并访问WINCE设备的数据。
写USB驱动很难也,我水平不够也,这个驱动好象是要写在手机那边吧,而且我是不想在手机那边写程序的啊.
-
好好学习,天天向上!
-
引用 6 楼 gooogleman 的回复:
引用 5 楼 xumercury 的回复:
你不是有WM的碟。看看WM的蓝牙驱动结构?
我觉得主要是我的蓝牙 是采用AT命令方式,
WM是采用微软的协议栈的。
汗,搞不定了。
蓝牙模块是AT的。。。一般的蓝牙模块是CSR+MCU
mcu负责做一个通讯,用户直接将AT送给MCU,然后由MCU来把at送给csr。。。。WM的协议栈的话。。不懂。
-
这个问题据说是IAR V5.4自己的问题,用最新的IAR EWARM V5.4(2009年9月份)就可以了。