-
vigia 你好,咱们能qq聊么,我的是460594396.拜托了,要是不方面的话,咱们就在这上面说,谢谢~~
-
当开发板时间和pc的时间差别很多时,开发板和pc通信就会很慢,开发板也会很慢。解决方案就是将开发板时间设置成与pc机一致。
这是syncactive的问题。
-
音频驱动的IOCTL是可以调用的,但一般不推荐,一般都采用waveapi.dll这个中间层(直接调用这些函数wavinopen。。。waveinstart。。。waveinclose就可以了),waveapi自动发出下面的消息到WAVE_IOCTL.
但自己加的IOCTL可以直接用deviceIOcontrol调用。
驱动会作如下处理:
typedef struct {
UINT uDeviceId;
UINT uMsg;
DWORD dwUser;
DWORD dwParam1;
DWORD dwParam2;
} MMDRV_MESSAGE_PARAMS, *PMMDRV_MESSAGE_PARAMS;
(在..\public\common\sdk\inc\wavedev.h定义)
这个是传输给WAV_IOControlr的数据结构。
(1)其中dwUser 参数在使用时为被强制转换成StreamContext,
例如:StreamContext *pStreamContext = (StreamContext *)dwUser;
(2)uMsg参数表示驱动要执行什么样的操作。具体对应如下:
// messages sent to wodMessage() entry-point function
#define WODM_GETNUMDEVS 3 //请求WAVEFORM输出驱动返回其支持的设备实例数量。
#define WODM_GETDEVCAPS 4 //请求WAVEFORM输出驱动返回特定设备的功能。
#define WODM_OPEN 5 //请求WAVEFORM输出驱动打开一个设备对应的流接口。
#define WODM_CLOSE 6 //请求WAVEFORM输出驱动关闭由WODM_OPEN建立的流接口。
#define WODM_PREPARE 7 // 请求WAVEFORM输出驱动为输出准备一个系统中唯一的数据缓冲。
#define WODM_UNPREPARE 8 // WODM_PREPARE的逆操作。
。。。
(3)dwParam1参数在执行具体功能是需要强制转换成不同的结构体。
例如: 在 WODM_OPEN:
dwRet = pDeviceContext->OpenStream((LPWAVEOPENDESC)dwParam1, dwParam2, (StreamContext **)dwUser);
(4)dwParam1参数主要作为一些标志位。
..\public\common\sdk\inc\mmsystem.h
/* flags for dwFlags parameter in waveOutOpen() and waveInOpen() */
#define WAVE_FORMAT_QUERY 0x00000001
#define WAVE_ALLOWSYNC 0x00000002
#define WAVE_MAPPED 0x00000004
#define WAVE_FORMAT_DIRECT 0x00000008
#define WAVE_FORMAT_DIRECT_QUERY (WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT)
#define WAVE_NOMIXER 0x00000080 /* Windows CE only - bypass software m
-
bios的东西不太懂,不过引导扇区的内容在PC上是用汇编写的,包括加载LOADER,实际上是调用BIOS的13H中断。
Loader的部分也基本上用汇编写,IA32的器件手册上有写怎么进入保护模式、分页之类的,包括内核跳转,google或者Baidu一下也能找到。
至于后面的都是操作系统方面的内容了,基本用C实现,包括TTY啦,键盘驱动啦,任务调度啦,内存管理啦。其中涉及到很多的数据结构和算法。太复杂。俺也不太清楚了。。。做过内核的大牛给讲讲吧
-
高三的娃都知道eeworld了啊
-
STM8单片机,PD0口中断时单片机执行一种功能,PD2口中断单片机执行另一种功能,能实现吗?怎么实现呢?
-
打出来的 串口消息
System ready!
Preparing for download...
INFO: *** Device Name 'SMDK245021862' ***
waitforconnect
INFO: using TOC[1] dwJumpAddress: 0x8022b430
INFO: OEMLaunch: Jumping to Physical Address 0x3022B430h (Virtual Address 0x8022B430h)...
Windows CE Kernel for ARM (Thumb Enabled) Built on Oct 20 2009 at 18:39:19
INFO:OALLogSetZones: dpCurSettings.ulZoneMask: 0xb
DCache: 128 sets, 4 ways, 32 line size, 16384 size
ICache: 128 sets, 4 ways, 32 line size, 16384 size
FCLK:400000000, HCLK:133333333, PCLK:66666666
-OEMInit
FMD_OEMIoControl: IOCTL_FMD_GET_INTERFACE 0x71f8c .
#### FMD_DRIVER:::FMD_INIT
(NAND ID:0xecd3) --> OK.
NUM_OF_BLOCKS = 8192
PAGES_PER_BLOCK = 64
SECTORS_PER_PAGE = 4
NUMBLOCKS : 8192(0x2000), SECTORSPERBLOCK = 64(0x40), BYTESPERSECTOR = 2048(0x800)
FMD_OEMIoControl: unrecognized IOCTL (0x71c24).
OEM: Not cleaning system hive
OEM: Not cleaning user profiles
OEM: Not cleaning system hive
DEBUG: CreateSerialObject 1
DEBUG: CreateSerialObject 2
Audio Input IRQ(DMA1) mapping: [IRQ:41->sysIRQ:20].
Audio Output IRQ(DMA2) mapping: [IRQ:42->sysIRQ:21].
I2CCDCLK=384 --> Prescaler:3
384 clock
BatStatus is 255
LifeTime is 65535
AC_LINE_OFFLINE
BatteryLifePercent is 238
NLedDriverInitialize: invoked
+APP_Init.
APP_Init:set bsp informations to reg;
-APP_Init.
+OALIoCtlHalGetHWEntropy
HOST CAP : 4
USB Serial Function Class Enabled : Serial_Class
+OALIoCtlHalGetDeviceInfo(...)
OALIoCtlHalGetDeviceInfo():SPI_GETUUID
-OALIoCtlHalGetDeviceInfo(SPI = , rc = 0)
HW_USBClocks: set usb2.0 as host
usb clock is Oscillator
+CS8900:DriverEntry
CS8900: -> NdisMRegisterMiniport
-CS8900:DriverEntry: Success!
+CS8900:MiniportInitialize
CS8900:Card type: 0x1
CS8900:I/O base addr 0xa9000300
CS8900:interrupt number 56
CS8900:interrupt number 56
CS8900:max multicast 8
CS8900:attribute memory address 0x0
CS8900:attribute memory size 0x0
CS8900:Bus type: 0
+CS8900:CS8900RegisterAdapter
CS8900: -> NdisMSetAttributes
[CS8900] VirtualAlloc of m_pCS8900IoPort returns d2be0000
[CS8900] m_pCS8900IoPort Virtual Copy OK!
[CS8900] m_pCS8900IoPort= d2be0300
+CS8900:CS8900Initialize
[CS8900] Signature Error 3136
[CS8900] Product ID = a00
CS8900:CSInit ok !!
-CS8900:CS8900Initialize - Success!
CS8900:RegisterAdapter Interrupt Connected
CS8900RegisterAdapter:Initialize the Interrupt!
CS8900:RegisterAdapter OK
-CS8900:MiniportInitialize Success!
+CS8900:CS8900QueryInformation
----> OID_GEN_VENDOR_DRIVER_VERSION
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation
----> OID_GEN_MAXIMUM_LOOKAHEAD
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation
----> OID_GEN_MAC_OPTIONS
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation
----> OID_802_3_MAXIMUM_LIST_SIZE
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation
----> OID_802_3_CURRENT_ADDRESS
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation
----> default
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation
----> default
-CS8900:CS8900QueryInformation
MiniportDevicePnPEvent
-
搞定了,原来是我把库文件安装到两个路径里,结果搞混了
-
字符闪烁,这估计得用中断来做了吧。寄存器设置中好像只有让光标闪烁的。
-
就是了。同乐,大家新年快乐
-
呵呵,价钱我倒是早就查过了。16000RMB不多。只是不想那么搞那么多手续。国内小公司的习惯嘛……
-
不是电力载波!
是主机使用直流的12V或24V供电,从机利用这两个线做电源,同时进行数据传输。
而且可以不考虑电源极性。
-
还有这功能?回头试试!
-
买块开发板,也就百十块钱。最好别省这个钱。
keil是开放51的最佳选择。
先把开发板随机带的例子全部跑通。熟练使用keil。
这些做完了基本就入门了。
-
看看
-
学习,帮顶
-
似乎是我写入的sector数目是 0x101af,但sector的最大数是 0xd932
BINFS分区不够大。查一下eboot里BP_OpenPartition创建binfs的代码,调整分区大小。
-
用 a=_cror_ (a, 1);不就行了吗,刚才打错字了
-
非常好,我测试成功了,再次感谢,呵呵。马上结帐。
-
手册中有计算时钟的公式,你计算一下就行了。。。。。。。。。
把PLL和分频寄存器值打印出来。。。。。
印象中,修改俩个头文件就行了。。。。。。。。
比较简单的。。。。。。。。。。