안녕하세요.
수신 다음으로 송신에 관하여 문의드립니다.
송신에서 발생한 문제점이 SEND 명령을 수행하면
PC와 보드간의 Ping이 끊어지는데요. PC에서는 아무런 Data도 받지 않고 있습니다(와이어샤크로 확인중)
Sn_SR의 값도 0x22로 출력됩니다.
혹시 다른 부분을 봐야할 곳이 있을까요??
아래는 송신쪽 코드입니다.
void write_data(uint8_t * buff, uint16_t len)
{
uint16_t size;
uint16_t src_mask;
uint32_t * src_ptr;
uint16_t ptr;
uint8_t ptr1,ptr2;
ptr1=DBRead8(S0_TX_WR1);
ptr2=DBRead8(S0_TX_WR2);
ptr = (ptr1 << 8) + ptr2;
src_mask = ptr & MASK;
src_ptr = (uint32_t *)(0x60004000 + src_mask);
if( (src_mask + len) > (uint16_t)SIZE )
{
size = (uint16_t)SIZE - src_mask;
memcpy((uint32_t *)src_ptr, buff, size);
buff += size;
size = len - size;
src_ptr = (uint32_t *)(0x60004000);
memcpy((uint32_t *)src_ptr, buff, size);
}
else
{
memcpy((uint32_t *)src_ptr, buff, len);
}
ptr += len; //write point update
ptr1 = (ptr & 0xff00) >> 8;
ptr2 = ptr & 0x00ff;
DBWrite8(S0_TX_WR1,ptr1);
DBWrite8(S0_TX_WR2,ptr2);
DBWrite8(S0_CR,SEND);
printf("\r\nS0_CR: 0x%x S0_SR: 0x%x S0_IR: 0x%x\r\n",(uint8_t)DBRead8(S0_CR),(uint8_t)DBRead8(S0_SR),(uint8_t)DBRead8(S0_IR));
}
출력은
S0_CR: 0x0 S0_SR: 0x22 S0_IR: 0x4
이렇게 나타납니다.
#define MASK 0x07FF //0x03FF 0x07FF 0x0FFF 0x1FFF
#define SIZE 2048 //1024 2048 4096 8192