[Tinyos-beta-commits] CVS: tinyos-1.x/beta/platform/imote2
HPLCC2420M.nc, 1.6, 1.7
Robbie Adler
radler at users.sourceforge.net
Mon Sep 19 16:58:36 PDT 2005
- Previous message: [Tinyos-beta-commits]
CVS: tinyos-1.x/beta/teps/txt tep112.txt, 1.2, 1.3
- Next message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/platform/pxa27x
PXA27XQuickCaptInt.h, NONE, 1.1 PXA27XQuickCaptInt.nc, NONE,
1.1 PXA27XQuickCaptIntC.nc, NONE, 1.1 PXA27XQuickCaptIntM.nc,
NONE, 1.1 PXA27XI2CM.nc, 1.1, 1.2 pxa27x_registers.h, 1.11, 1.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/tinyos/tinyos-1.x/beta/platform/imote2
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29888
Modified Files:
HPLCC2420M.nc
Log Message:
added compile-time option to use either DMA or programmed I/O for radio rx/tx fifo interaction. By default, programmed I/O is used for now due to incorrect upper layer assumptions
Index: HPLCC2420M.nc
===================================================================
RCS file: /cvsroot/tinyos/tinyos-1.x/beta/platform/imote2/HPLCC2420M.nc,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** HPLCC2420M.nc 19 Sep 2005 20:58:38 -0000 1.6
--- HPLCC2420M.nc 19 Sep 2005 23:58:34 -0000 1.7
***************
*** 67,76 ****
{
! enum {
! PXA27X_SSP_FIFOMAXLEN = 13
! };
!
uint8_t gbDMAChannelInitDone;
bool gbIgnoreTxDMA;
norace uint8_t* rxbuf;
norace uint8_t* txbuf;
--- 67,75 ----
{
! #define USE_DMA 0
!
uint8_t gbDMAChannelInitDone;
bool gbIgnoreTxDMA;
+ uint8_t RxDMAInProgress;
norace uint8_t* rxbuf;
norace uint8_t* txbuf;
***************
*** 85,111 ****
norace uint16_t rxramaddr;
norace uint32_t errno;
- uint8_t RxDMAInProgress;
command result_t StdControl.init() {
! // Set the appropriate GPIO bits
! _GPDR(SSP3_SCLK) |= _GPIO_bit(SSP3_SCLK); // SSP3SCLK
! _GPDR(SSP3_TXD) |= _GPIO_bit(SSP3_TXD); // SSP3TXD
! _GPDR(SSP3_RXD) &= ~(_GPIO_bit(SSP3_RXD)); //SSP3RXD
! //_GPDR(SSP3_SFRM) |= _GPIO_bit(SSP3_SFRM); // SSP3SFRM
!
! _GPIO_setaltfn(SSP3_SCLK,SSP3_SCLK_ALTFN);
! _GPIO_setaltfn(SSP3_TXD,SSP3_TXD_ALTFN);
! _GPIO_setaltfn(SSP3_RXD,SSP3_RXD_ALTFN);
! //_GPIO_setaltfn(SSP3_SFRM,SSP3_SFRM_ALTFN);
atomic gbDMAChannelInitDone = 2;
-
call RxDMAChannel.requestChannel(DMAID_SSP3_RX,DMA_Priority1, TRUE);
call TxDMAChannel.requestChannel(DMAID_SSP3_TX,DMA_Priority1, TRUE);
-
call DMAControl.init();
! call GPIOControl.init();
!
call TxDMAChannel.setTargetAddr(0x41900010);
call TxDMAChannel.enableSourceAddrIncrement(TRUE);
--- 84,100 ----
norace uint16_t rxramaddr;
norace uint32_t errno;
command result_t StdControl.init() {
! _PXA_setaltfn(SSP3_SCLK,SSP3_SCLK_ALTFN,GPIO_OUT);
! _PXA_setaltfn(SSP3_TXD,SSP3_TXD_ALTFN,GPIO_OUT);
! _PXA_setaltfn(SSP3_RXD,SSP3_RXD_ALTFN,GPIO_IN);
! // _PXA_setaltfn(SSP3_SFRM,SSP3_SFRM_ALTFN,GPIOIN);
atomic gbDMAChannelInitDone = 2;
call RxDMAChannel.requestChannel(DMAID_SSP3_RX,DMA_Priority1, TRUE);
call TxDMAChannel.requestChannel(DMAID_SSP3_TX,DMA_Priority1, TRUE);
call DMAControl.init();
!
call TxDMAChannel.setTargetAddr(0x41900010);
call TxDMAChannel.enableSourceAddrIncrement(TRUE);
***************
*** 124,127 ****
--- 113,118 ----
call RxDMAChannel.setTransferWidth(DMA_1ByteWidth);
+ call GPIOControl.init();
+
return SUCCESS;
}
***************
*** 138,143 ****
SSCR0_3 = (SSCR0_SCR(1) | SSCR0_FRF(0) | SSCR0_DSS(0x7) | SSCR0_SSE);
-
call DMAControl.start();
call GPIOControl.start();
return SUCCESS;
--- 129,134 ----
SSCR0_3 = (SSCR0_SCR(1) | SSCR0_FRF(0) | SSCR0_DSS(0x7) | SSCR0_SSE);
call DMAControl.start();
+
call GPIOControl.start();
return SUCCESS;
***************
*** 146,150 ****
command result_t StdControl.stop() {
! call DMAControl.start();
call GPIOControl.stop();
--- 137,141 ----
command result_t StdControl.stop() {
! call DMAControl.stop();
call GPIOControl.stop();
***************
*** 401,411 ****
//increment the length to include the length byte itself
pktlen++;
if (pktlen > 0 && (OkToUse == 0)) {
-
//don't want to overflow memory...
atomic{
rxlen = (pktlen < length) ? pktlen : length;
}
!
call RxDMAChannel.setTargetAddr((uint32_t)(rxbuf));
call RxDMAChannel.setTransferLength(rxlen);
--- 392,403 ----
//increment the length to include the length byte itself
pktlen++;
+
if (pktlen > 0 && (OkToUse == 0)) {
//don't want to overflow memory...
atomic{
rxlen = (pktlen < length) ? pktlen : length;
}
!
! #if USE_DMA
call RxDMAChannel.setTargetAddr((uint32_t)(rxbuf));
call RxDMAChannel.setTransferLength(rxlen);
***************
*** 429,432 ****
--- 421,453 ----
SSCR1_3 |= SSCR1_TSRE;
return call TxDMAChannel.run(TRUE);
+ #else
+ //read it out manually...don't use DMA we have a 16 entry fifo, so let's take advantage!
+ {
+ //introduce a new scope to avoid compiler warnings
+ int i;
+ length = rxlen; //overload the parameter that was passed to use with the proper value
+ while(length >16){
+ //still have more than 16 byte to go, do a "burst"
+ for(i=0; i<16; i++){
+ SSDR_3 = 0;
+ }
+ while(SSSR_3 & SSSR_BSY);
+ for(i=0; i<16; i++){
+ *data++ = SSDR_3;
+ }
+ length -= 16;
+ }
+ for(i=0;i<length;i++){
+ SSDR_3 = 0;
+ }
+ while(SSSR_3 & SSSR_BSY);
+ for(i=0; i<length; i++){
+ *data++ = SSDR_3;
+ }
+ post signalRXFIFO();
+ TOSH_SET_CC_CSN_PIN();
+ return SUCCESS;
+ }
+ #endif
}
else {
***************
*** 460,463 ****
--- 481,485 ----
OkToUse = gbDMAChannelInitDone;
}
+ #if USE_DMA
if(OkToUse == 0){
cleanDCache(txbuf, txlen);
***************
*** 479,487 ****
call TxDMAChannel.run(TRUE);
return SUCCESS;
! }
else{
return FAIL;
}
! }
async command result_t InterruptFIFOP.startWait(bool low_to_high){
--- 501,541 ----
call TxDMAChannel.run(TRUE);
return SUCCESS;
! }
else{
return FAIL;
}
! #else
! {
! //introduce a new scope to avoid compiler warnings
! int i;
! uint8_t tmp;
!
! TOSH_CLR_CC_CSN_PIN();
! SSDR_3 = (CC2420_TXFIFO);
! while(SSSR_3 & SSSR_BSY);
!
! while(length >16){
! //still have more than 16 byte to go, do a "burst"
! for(i=0; i<16; i++){
! SSDR_3 = *data++;
! }
! while(SSSR_3 & SSSR_BSY);
! length -= 16;
! }
! for(i=0;i<length;i++){
! SSDR_3 = *data++;
! }
! while(SSSR_3 & SSSR_BSY);
!
! //now clear out the FIFO
! for(i=0; i<16; i++){
! tmp = SSDR_3;
! }
! post signalTXFIFO();
! TOSH_SET_CC_CSN_PIN();
! return SUCCESS;
! }
! #endif
! }
async command result_t InterruptFIFOP.startWait(bool low_to_high){
***************
*** 656,660 ****
}
-
default async event result_t InterruptFIFOP.fired() {
return FAIL;
--- 710,713 ----
- Previous message: [Tinyos-beta-commits]
CVS: tinyos-1.x/beta/teps/txt tep112.txt, 1.2, 1.3
- Next message: [Tinyos-beta-commits] CVS: tinyos-1.x/beta/platform/pxa27x
PXA27XQuickCaptInt.h, NONE, 1.1 PXA27XQuickCaptInt.nc, NONE,
1.1 PXA27XQuickCaptIntC.nc, NONE, 1.1 PXA27XQuickCaptIntM.nc,
NONE, 1.1 PXA27XI2CM.nc, 1.1, 1.2 pxa27x_registers.h, 1.11, 1.12
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Tinyos-beta-commits
mailing list