Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of I2cRtosDriver by
I2CDriverTest01.h@3:967dde37e712, 2013-04-19 (annotated)
- Committer:
- humlet
- Date:
- Fri Apr 19 21:33:29 2013 +0000
- Revision:
- 3:967dde37e712
- Child:
- 4:eafa7efcd771
refactored, compiles and crashes
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| humlet | 3:967dde37e712 | 1 | #include "mbed.h" |
| humlet | 3:967dde37e712 | 2 | #include "rtos.h" |
| humlet | 3:967dde37e712 | 3 | #include "I2CMasterRtos.h" |
| humlet | 3:967dde37e712 | 4 | #include "stdint.h" |
| humlet | 3:967dde37e712 | 5 | |
| humlet | 3:967dde37e712 | 6 | volatile int disco=0; |
| humlet | 3:967dde37e712 | 7 | volatile osThreadId i2cDrvThrdID; |
| humlet | 3:967dde37e712 | 8 | |
| humlet | 3:967dde37e712 | 9 | void highPrioCallBck(void const *args) |
| humlet | 3:967dde37e712 | 10 | { |
| humlet | 3:967dde37e712 | 11 | osSignalSet(i2cDrvThrdID, 1<<5); |
| humlet | 3:967dde37e712 | 12 | } |
| humlet | 3:967dde37e712 | 13 | |
| humlet | 3:967dde37e712 | 14 | void highPrioThreadFun(void const *args) |
| humlet | 3:967dde37e712 | 15 | { |
| humlet | 3:967dde37e712 | 16 | i2cDrvThrdID = Thread::gettid(); |
| humlet | 3:967dde37e712 | 17 | I2CMasterRtos i2c(p28, p27); |
| humlet | 3:967dde37e712 | 18 | i2c.frequency(400000); |
| humlet | 3:967dde37e712 | 19 | const uint32_t adr = 0x70<<1; |
| humlet | 3:967dde37e712 | 20 | |
| humlet | 3:967dde37e712 | 21 | // trigger on srf08 ranging |
| humlet | 3:967dde37e712 | 22 | const char regNcmd[2]= {0x00,0x51}; |
| humlet | 3:967dde37e712 | 23 | i2c.write(adr, regNcmd, 2); |
| humlet | 3:967dde37e712 | 24 | |
| humlet | 3:967dde37e712 | 25 | while(true) { |
| humlet | 3:967dde37e712 | 26 | Thread::signal_wait(1<<5,osWaitForever); |
| humlet | 3:967dde37e712 | 27 | // read back srf08 echo times (1+16 words) |
| humlet | 3:967dde37e712 | 28 | const char reg= 0x02; |
| humlet | 3:967dde37e712 | 29 | char result[64]; |
| humlet | 3:967dde37e712 | 30 | uint32_t t1=us_ticker_read(); |
| humlet | 3:967dde37e712 | 31 | i2c.read(adr, reg, result, 25, 1); |
| humlet | 3:967dde37e712 | 32 | |
| humlet | 3:967dde37e712 | 33 | uint32_t dt=us_ticker_read()-t1; |
| humlet | 3:967dde37e712 | 34 | uint16_t tm=((static_cast<uint16_t>(result[0])<<8)|static_cast<uint16_t>(result[1])); |
| humlet | 3:967dde37e712 | 35 | |
| humlet | 3:967dde37e712 | 36 | if(--disco>0) printf("tm=%4dus dt=%4dus\n",tm,dt); |
| humlet | 3:967dde37e712 | 37 | } |
| humlet | 3:967dde37e712 | 38 | } |
| humlet | 3:967dde37e712 | 39 | |
| humlet | 3:967dde37e712 | 40 | int doit() |
| humlet | 3:967dde37e712 | 41 | { |
| humlet | 3:967dde37e712 | 42 | Thread highPrioThread(highPrioThreadFun,0,osPriorityAboveNormal); |
| humlet | 3:967dde37e712 | 43 | RtosTimer highPrioTicker(highPrioCallBck, osTimerPeriodic, (void *)0); |
| humlet | 3:967dde37e712 | 44 | |
| humlet | 3:967dde37e712 | 45 | Thread::wait(100); |
| humlet | 3:967dde37e712 | 46 | highPrioTicker.start(1); |
| humlet | 3:967dde37e712 | 47 | |
| humlet | 3:967dde37e712 | 48 | uint32_t cnt=0; |
| humlet | 3:967dde37e712 | 49 | while (++cnt<5) { |
| humlet | 3:967dde37e712 | 50 | const uint32_t dt=1e6; |
| humlet | 3:967dde37e712 | 51 | uint32_t tStart = us_ticker_read(); |
| humlet | 3:967dde37e712 | 52 | uint32_t tLast = tStart; |
| humlet | 3:967dde37e712 | 53 | uint32_t tAct = tStart; |
| humlet | 3:967dde37e712 | 54 | uint32_t tMe=0; |
| humlet | 3:967dde37e712 | 55 | do { |
| humlet | 3:967dde37e712 | 56 | tAct=us_ticker_read(); |
| humlet | 3:967dde37e712 | 57 | if(tAct>tLast) { |
| humlet | 3:967dde37e712 | 58 | if(tAct==tLast+1)++tMe; |
| humlet | 3:967dde37e712 | 59 | } |
| humlet | 3:967dde37e712 | 60 | tLast=tAct; |
| humlet | 3:967dde37e712 | 61 | } while(tAct-tStart<dt); |
| humlet | 3:967dde37e712 | 62 | printf("dc=%5.2f \n", 100.0*(float)tMe/dt); |
| humlet | 3:967dde37e712 | 63 | disco=10; |
| humlet | 3:967dde37e712 | 64 | while(disco>0); |
| humlet | 3:967dde37e712 | 65 | Thread::wait(1000); |
| humlet | 3:967dde37e712 | 66 | } |
| humlet | 3:967dde37e712 | 67 | return 0; |
| humlet | 3:967dde37e712 | 68 | } |
