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
Revision 8:5be85bd4c5ba, committed 2013-04-30
- Comitter:
- humlet
- Date:
- Tue Apr 30 19:12:57 2013 +0000
- Parent:
- 7:04824382eafb
- Child:
- 9:65aae53a34de
- Commit message:
- alpha2
Changed in this revision
--- a/I2CDriver.cpp Sun Apr 28 15:08:04 2013 +0000
+++ b/I2CDriver.cpp Tue Apr 30 19:12:57 2013 +0000
@@ -2,12 +2,15 @@
#include "i2c_api.h"
#include "error.h"
-#include "DigitalOut.h"
-
using namespace mbed;
using namespace rtos;
-DigitalOut osci(p12);
+extern "C"{
+osSemaphoreId i2cIsrDrvSem_1;
+osSemaphoreDef(i2cIsrDrvSem_1);
+osSemaphoreId i2cIsrDrvSem_2;
+osSemaphoreDef(i2cIsrDrvSem_2);
+}
#define DRV_USR_SIG (1<<6)
@@ -19,23 +22,19 @@
#if defined(TARGET_LPC1768)
void I2CDriver::channel_0_ISR()
{
- osci.write(1);
- osSignalSet( s_channels[0]->driver, I2C_ISR_DRV_SIG);
+ osSemaphoreRelease(i2cIsrDrvSem_1);
NVIC_DisableIRQ(I2C1_IRQn);
- osci.write(0);
}
#endif
void I2CDriver::channel_1_ISR()
{
- osci.write(1);
- osSignalSet( s_channels[1]->driver, I2C_ISR_DRV_SIG);
+ osSemaphoreRelease(i2cIsrDrvSem_2);
#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
NVIC_DisableIRQ(I2C2_IRQn);
#elif defined(TARGET_LPC11U24)
NVIC_DisableIRQ(I2C_IRQn);
#endif
- osci.write(0);
}
@@ -50,8 +49,16 @@
if (sda==c_sdas[1] && scl==c_scls[1]) channel=1; //I2C_2 or I2C
else error("I2CDriver: Invalid I2C pinns selected");
- if(s_channels[channel]==0)
+ if(s_channels[channel]==0){
new Thread(threadFun,(void *)channel,osPriorityRealtime,256);
+ if(channel==0){
+ i2cIsrDrvSem_1 = osSemaphoreCreate(osSemaphore(i2cIsrDrvSem_1), 1);
+ osSemaphoreWait(i2cIsrDrvSem_1,osWaitForever);
+ }else{
+ i2cIsrDrvSem_2 = osSemaphoreCreate(osSemaphore(i2cIsrDrvSem_2), 1);
+ osSemaphoreWait(i2cIsrDrvSem_2,osWaitForever);
+ }
+ }
m_channel = s_channels[channel];
}
--- a/I2CDriverTest01.h Sun Apr 28 15:08:04 2013 +0000
+++ b/I2CDriverTest01.h Tue Apr 30 19:12:57 2013 +0000
@@ -2,12 +2,15 @@
#include "rtos.h"
#include "I2CMasterRtos.h"
#include "stdint.h"
+#include "DigitalOut.h"
volatile int g_disco=0;
volatile int g_len=0;
volatile int g_freq=100000;
volatile osThreadId i2cDrvThrdID;
+DigitalOut osci(p12);
+
void highPrioCallBck(void const *args)
{
osSignalSet(i2cDrvThrdID, 1<<5);
@@ -22,7 +25,7 @@
// trigger on srf08 ranging
const char regNcmd[2]= {0x00,0x51};
i2c.write(adr, regNcmd, 2);
-
+ osDelay(200);
while(true) {
i2c.frequency(g_freq);
Thread::signal_wait(1<<5,osWaitForever);
@@ -30,7 +33,7 @@
const char reg= 0x02;
char result[64];
uint32_t t1=us_ticker_read();
- i2c.read(adr, reg, result, g_len, 1);
+ i2c.read(adr, reg, result, g_len);
uint32_t dt=us_ticker_read()-t1;
uint16_t tm=((static_cast<uint16_t>(result[0])<<8)|static_cast<uint16_t>(result[1]));
@@ -53,7 +56,7 @@
#elif defined(TARGET_LPC11U24)
const int nTest=5;
const int freq[nTest]= {1e5, 1e5, 4e5, 4e5, 4e5 };
- const int len[nTest]= {1, 4, 1, 6, 12};
+ const int len[nTest]= {1, 4, 1, 6, 16};
#endif
for(int i=0; i<nTest; ++i) {
g_freq = freq[i];
@@ -69,6 +72,7 @@
tAct=us_ticker_read();
if(tAct>tLast) {
if(tAct==tLast+1)++tMe;
+ osci.write(tAct&1);
}
tLast=tAct;
} while(tAct-tStart<dt);
--- a/I2CDriverTest04.h Sun Apr 28 15:08:04 2013 +0000
+++ b/I2CDriverTest04.h Tue Apr 30 19:12:57 2013 +0000
@@ -49,11 +49,11 @@
#if defined(TARGET_LPC1768)
const int nTest=7;
const int freq[nTest]= {1e5, 1e5, 1e5, 4e5, 4e5, 4e5, 4e5};
- const int len[nTest]= {1, 4, 6, 1, 6, 12, 29};
+ const int len[nTest]= {1, 4, 6, 1, 6, 12, 30};
#elif defined(TARGET_LPC11U24)
const int nTest=5;
const int freq[nTest]= {1e5, 1e5, 4e5, 4e5, 4e5 };
- const int len[nTest]= {1, 4, 1, 6, 12};
+ const int len[nTest]= {1, 4, 1, 6, 16};
#endif
for(int i=0; i<nTest; ++i) {
g_freq = freq[i];
@@ -69,6 +69,7 @@
tAct=us_ticker_read();
if(tAct>tLast) {
if(tAct==tLast+1)++tMe;
+ //tLast=tAct;
}
tLast=tAct;
} while(tAct-tStart<dt);
--- a/mbed-NXP.lib Sun Apr 28 15:08:04 2013 +0000 +++ b/mbed-NXP.lib Tue Apr 30 19:12:57 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/humlet/code/mbed-NXP/#5e7f2f37d75b +http://mbed.org/users/humlet/code/mbed-NXP/#692b566d83bf
--- a/mbed-src.lib Sun Apr 28 15:08:04 2013 +0000 +++ b/mbed-src.lib Tue Apr 30 19:12:57 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/humlet/code/mbed-src/#28ed2abfeb85 +http://mbed.org/users/humlet/code/mbed-src/#49923059ddc8
