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
I2CDriverTest02.h@4:eafa7efcd771, 2013-04-20 (annotated)
- Committer:
- humlet
- Date:
- Sat Apr 20 09:52:09 2013 +0000
- Revision:
- 4:eafa7efcd771
- Parent:
- 3:967dde37e712
- Child:
- 6:5b98c902a659
running
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 "I2CSlaveRtos.h" |
| humlet | 3:967dde37e712 | 5 | |
| humlet | 4:eafa7efcd771 | 6 | const int freq = 400000; |
| humlet | 3:967dde37e712 | 7 | const int adr = 42; |
| humlet | 3:967dde37e712 | 8 | const int len=42; |
| humlet | 4:eafa7efcd771 | 9 | const char* mstMsg="We are mbed, resistance is futile"; |
| humlet | 4:eafa7efcd771 | 10 | const char* slvMsg="Fine with me, let's get addicted"; |
| humlet | 3:967dde37e712 | 11 | |
| humlet | 4:eafa7efcd771 | 12 | static void slvRxMsg(I2CSlaveRtos& slv) |
| humlet | 3:967dde37e712 | 13 | { |
| humlet | 4:eafa7efcd771 | 14 | char rxMsg[len]; |
| humlet | 4:eafa7efcd771 | 15 | memset(rxMsg,0,len); |
| humlet | 3:967dde37e712 | 16 | if ( slv.receive() == I2CSlave::WriteAddressed) { |
| humlet | 4:eafa7efcd771 | 17 | slv.read(rxMsg, len); |
| humlet | 4:eafa7efcd771 | 18 | //rMsg[len-1]=0; |
| humlet | 4:eafa7efcd771 | 19 | printf("thread %X received message as i2c slave: '%s'\n",Thread::gettid(),rxMsg); |
| humlet | 3:967dde37e712 | 20 | } else |
| humlet | 4:eafa7efcd771 | 21 | printf("Ouch slv rx failure\n"); |
| humlet | 3:967dde37e712 | 22 | } |
| humlet | 3:967dde37e712 | 23 | |
| humlet | 4:eafa7efcd771 | 24 | static void slvTxMsg(I2CSlaveRtos& slv) |
| humlet | 4:eafa7efcd771 | 25 | { |
| humlet | 4:eafa7efcd771 | 26 | if ( slv.receive() == I2CSlave::ReadAddressed) { |
| humlet | 4:eafa7efcd771 | 27 | slv.write(slvMsg, len); |
| humlet | 4:eafa7efcd771 | 28 | } else |
| humlet | 4:eafa7efcd771 | 29 | printf("Ouch slv tx failure\n"); |
| humlet | 4:eafa7efcd771 | 30 | } |
| humlet | 4:eafa7efcd771 | 31 | |
| humlet | 4:eafa7efcd771 | 32 | static void mstTxMsg(I2CMasterRtos& mst) |
| humlet | 3:967dde37e712 | 33 | { |
| humlet | 4:eafa7efcd771 | 34 | mst.write(adr,mstMsg,len); |
| humlet | 4:eafa7efcd771 | 35 | //printf("thread %X has sent the message\n",Thread::gettid()); |
| humlet | 4:eafa7efcd771 | 36 | } |
| humlet | 4:eafa7efcd771 | 37 | |
| humlet | 4:eafa7efcd771 | 38 | static void mstRxMsg(I2CMasterRtos& mst) |
| humlet | 4:eafa7efcd771 | 39 | { |
| humlet | 4:eafa7efcd771 | 40 | char rxMsg[len]; |
| humlet | 4:eafa7efcd771 | 41 | memset(rxMsg,0,len); |
| humlet | 4:eafa7efcd771 | 42 | mst.read(adr,rxMsg,len); |
| humlet | 4:eafa7efcd771 | 43 | printf("thread %X received message as i2c master: '%s'\n",Thread::gettid(),rxMsg); |
| humlet | 3:967dde37e712 | 44 | } |
| humlet | 3:967dde37e712 | 45 | |
| humlet | 3:967dde37e712 | 46 | static void channel1(void const *args) |
| humlet | 3:967dde37e712 | 47 | { |
| humlet | 3:967dde37e712 | 48 | I2CMasterRtos mst(p9,p10,freq); |
| humlet | 3:967dde37e712 | 49 | I2CSlaveRtos slv(p9,p10,freq,adr); |
| humlet | 3:967dde37e712 | 50 | while(1) { |
| humlet | 4:eafa7efcd771 | 51 | slvRxMsg(slv); |
| humlet | 4:eafa7efcd771 | 52 | slvTxMsg(slv); |
| humlet | 3:967dde37e712 | 53 | Thread::wait(100); |
| humlet | 4:eafa7efcd771 | 54 | mstTxMsg(mst); |
| humlet | 3:967dde37e712 | 55 | Thread::wait(100); |
| humlet | 4:eafa7efcd771 | 56 | mstRxMsg(mst); |
| humlet | 3:967dde37e712 | 57 | } |
| humlet | 3:967dde37e712 | 58 | } |
| humlet | 3:967dde37e712 | 59 | |
| humlet | 3:967dde37e712 | 60 | void channel2(void const *args) |
| humlet | 3:967dde37e712 | 61 | { |
| humlet | 3:967dde37e712 | 62 | I2CMasterRtos mst(p28,p27,freq); |
| humlet | 3:967dde37e712 | 63 | I2CSlaveRtos slv(p28,p27,freq,adr); |
| humlet | 3:967dde37e712 | 64 | while(1) { |
| humlet | 4:eafa7efcd771 | 65 | Thread::wait(100); |
| humlet | 4:eafa7efcd771 | 66 | mstTxMsg(mst); |
| humlet | 3:967dde37e712 | 67 | Thread::wait(100); |
| humlet | 4:eafa7efcd771 | 68 | mstRxMsg(mst); |
| humlet | 4:eafa7efcd771 | 69 | slvRxMsg(slv); |
| humlet | 4:eafa7efcd771 | 70 | slvTxMsg(slv); |
| humlet | 3:967dde37e712 | 71 | } |
| humlet | 3:967dde37e712 | 72 | } |
| humlet | 3:967dde37e712 | 73 | |
| humlet | 3:967dde37e712 | 74 | int doit() |
| humlet | 3:967dde37e712 | 75 | { |
| humlet | 3:967dde37e712 | 76 | Thread selftalk01(channel1,0,osPriorityAboveNormal); |
| humlet | 3:967dde37e712 | 77 | Thread selftalk02(channel2,0,osPriorityAboveNormal); |
| humlet | 3:967dde37e712 | 78 | |
| humlet | 3:967dde37e712 | 79 | uint32_t cnt=0; |
| humlet | 3:967dde37e712 | 80 | while (++cnt<5) { |
| humlet | 3:967dde37e712 | 81 | const uint32_t dt=1e6; |
| humlet | 3:967dde37e712 | 82 | uint32_t tStart = us_ticker_read(); |
| humlet | 3:967dde37e712 | 83 | uint32_t tLast = tStart; |
| humlet | 3:967dde37e712 | 84 | uint32_t tAct = tStart; |
| humlet | 3:967dde37e712 | 85 | uint32_t tMe=0; |
| humlet | 3:967dde37e712 | 86 | do { |
| humlet | 3:967dde37e712 | 87 | tAct=us_ticker_read(); |
| humlet | 3:967dde37e712 | 88 | if(tAct>tLast) { |
| humlet | 3:967dde37e712 | 89 | if(tAct==tLast+1)++tMe; |
| humlet | 3:967dde37e712 | 90 | } |
| humlet | 3:967dde37e712 | 91 | tLast=tAct; |
| humlet | 3:967dde37e712 | 92 | } while(tAct-tStart<dt); |
| humlet | 3:967dde37e712 | 93 | printf("dc=%5.2f \n", 100.0*(float)tMe/dt); |
| humlet | 3:967dde37e712 | 94 | } |
| humlet | 3:967dde37e712 | 95 | return 0; |
| humlet | 3:967dde37e712 | 96 | } |
| humlet | 3:967dde37e712 | 97 |
