ez430-RF2500을 가지고 기본적인 테스트가 끝났기 때문에 이제는 CC2500을 이용하여 RF통신 실험을 해 보자. TI에서 제공되는코들르 보면 좀 복잡하고 추가나 수정이 어여운 코드로 작성되어 있는데... 이 부분을 좀 수정하여 좀 더 간단히 코드를 작성해 보았다.
일단 CC2500 기본 제어 부 및 SimpliciTi는 특별히 수정할 필요가 없기 때문에 한 폴더로 넣어서 라이브러리 형태로 취급하고 RF송수신을 위한 가장 기본 코드만 남기도록 한다. -> 아래와 같이 하면 아주 심플 해 진다.
network config파일은 EXTRA Option에 등록한다.
-f"$PROJ_DIR$\Configuration\Access Point\smpl_config.dat"
-f"$PROJ_DIR$\Configuration\smpl_nwk_config.dat"
그리고 Stack Szie 설정도 아래와 같이 해 둔다. ( 설정하지 않으면 정상동작을 하지 않는데... 원인 찾기가 상당히 힘들었다.)
End Device에서 스위치를 누를때마다 데이터를 수신 받아서 UART로 표시 하는 예제코드
스위치를 입력할 때마다 index값을 증가 시켜 전송하는 코드
테스트 결과
CC2500 RF Test Program.
0
1
2
3
4
5
6
7
8
9
일단 CC2500 기본 제어 부 및 SimpliciTi는 특별히 수정할 필요가 없기 때문에 한 폴더로 넣어서 라이브러리 형태로 취급하고 RF송수신을 위한 가장 기본 코드만 남기도록 한다. -> 아래와 같이 하면 아주 심플 해 진다.
network config파일은 EXTRA Option에 등록한다.
-f"$PROJ_DIR$\Configuration\Access Point\smpl_config.dat"
-f"$PROJ_DIR$\Configuration\smpl_nwk_config.dat"
그리고 Stack Szie 설정도 아래와 같이 해 둔다. ( 설정하지 않으면 정상동작을 하지 않는데... 원인 찾기가 상당히 힘들었다.)
End Device에서 스위치를 누를때마다 데이터를 수신 받아서 UART로 표시 하는 예제코드
void main (void)
{
addr_t lAddr;
SystemInit();
Delay(1000);
CC2500_Init();
DebugInit(BAUD_115200);
DebugPrint("CC2500 RF Test Program.\r\n");
//-------------------------------------------------------
// set device address
if( Flash_Addr[0] == 0xFF &&
Flash_Addr[1] == 0xFF &&
Flash_Addr[2] == 0xFF &&
Flash_Addr[3] == 0xFF )
{
createRandomAddress();
}
lAddr.addr[0]=Flash_Addr[0];
lAddr.addr[1]=Flash_Addr[1];
lAddr.addr[2]=Flash_Addr[2];
lAddr.addr[3]=Flash_Addr[3];
SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr);
//-------------------------------------------------------
SMPL_Init(sCB);
// main work loop
while (1)
{
ListenForConnection();
ProcessCC2500RX();
}
}
void RevDataString(int addr, signed char rssi, unsigned char *Msg, unsigned int Size)
{
unsigned int i;
for(i=0;i<Size;i++)
{
DebugPrint("%x ", Msg[i]);
}
DebugPrint("\r\n");
}
{
addr_t lAddr;
SystemInit();
Delay(1000);
CC2500_Init();
DebugInit(BAUD_115200);
DebugPrint("CC2500 RF Test Program.\r\n");
//-------------------------------------------------------
// set device address
if( Flash_Addr[0] == 0xFF &&
Flash_Addr[1] == 0xFF &&
Flash_Addr[2] == 0xFF &&
Flash_Addr[3] == 0xFF )
{
createRandomAddress();
}
lAddr.addr[0]=Flash_Addr[0];
lAddr.addr[1]=Flash_Addr[1];
lAddr.addr[2]=Flash_Addr[2];
lAddr.addr[3]=Flash_Addr[3];
SMPL_Ioctl(IOCTL_OBJ_ADDR, IOCTL_ACT_SET, &lAddr);
//-------------------------------------------------------
SMPL_Init(sCB);
// main work loop
while (1)
{
ListenForConnection();
ProcessCC2500RX();
}
}
void RevDataString(int addr, signed char rssi, unsigned char *Msg, unsigned int Size)
{
unsigned int i;
for(i=0;i<Size;i++)
{
DebugPrint("%x ", Msg[i]);
}
DebugPrint("\r\n");
}
스위치를 입력할 때마다 index값을 증가 시켜 전송하는 코드
if(GetSw1())
{
if(!flag)
{
flag = 1;
msg[0] = index++;
if(SMPL_SUCCESS == SMPL_Send(linkID1, msg, 1))
{
}
}else
{
if(flag)flag=0;
}
{
if(!flag)
{
flag = 1;
msg[0] = index++;
if(SMPL_SUCCESS == SMPL_Send(linkID1, msg, 1))
{
}
}else
{
if(flag)flag=0;
}
테스트 결과
CC2500 RF Test Program.
0
1
2
3
4
5
6
7
8
9
반응형