打印

DSP2812串口打印问题求助

[复制链接]
2015|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 badfong 于 2016-3-2 15:40 编辑

刚接触DSP,选了2812入手,做了块测试板,其中用到Xintf总线及SCI串口资源,看似两个简单的功能,没想到问题多多,希望大神们能帮我解答以下两问题:

1、我先用Xintf总线方式访问外部存储器件,先写后读,然后用printf函数打印出所读数据,在调试模式下发现用了printf函数后会影响Xintf总线时序,但是点开memory查看xintf寄存器设置值就是我初始化的值,没有改变,至于为什么会影响了xintf总线时序,我想可能是打印用了内存资源,导致这种现象。有什么方法能解决这问题求大神们告知下小弟;

2、考虑到可能是调试模式下内存资源空间太小,影响了程序,于是将程序下载到Flash下启动运行。由于在Flash下运行,就不能用自带的printf函数打印了,我就将之前arm用过的打印程序移植过来,也是遇到各种问题,后来才知道arm是8位的内存,而2812是16位的,所以程序不能直接用,改了下终于调通了,现在字符,十进制数正常打印,但是打印十六进制数时,却只能打印到8位...崩溃了

3、我就想用Xintf总线及串口打印功能,哪位大神有这可用的例程提供小弟参考吗?(网上找了很少有串口打印的例程,都是用调试模式下自带printf函数,程序一大再用上printf函数编译都不过了)

附上自写的printf函数:     

/* Private define ------------------------------------------------------------*/
#define uart_sizeof_int(n)         ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))
//#define uart_va_start(ap,v)       (ap = (uart_va_list)&v +uart_sizeof_int(v))
#define uart_va_start(ap,v)      (ap = (uart_va_list)&v + 1)
//#define uart_va_arg(ap,t)         (*(t *)((ap += uart_sizeof_int(t)) - uart_sizeof_int(t)))
#define uart_va_arg(ap,t)        (*(t *)((ap -= uart_sizeof_int(t)) - uart_sizeof_int(t)))  
#define uart_va_end(ap)         (ap = (uart_va_list)0)

//#define UART_SEND_BYTE(ch)   USART_SendChar(USART2, (u8*)ch)
#define UART_SEND_BYTE(ch)   USART_SendChar((char*)ch)

void USART_SendChar(char* ch)
{
    ScibRegs.SCITXBUF =  (ch[0] & (u16)0x01FF);
    while(ScibRegs.SCICTL2.bit.TXEMPTY == 0);  
    //while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);  
}

void DebugPrintf(char* format, ...)
{
    char *    s = 0;
    int     d = 0, i = 0;
    int     x = 0;
    unsigned char  ch[sizeof(int) * 2 + 2] = {0};
    unsigned char  zero[2]={48,48};
    uart_va_list   ap = 0;

    uart_va_start(ap, format);
   while (* format)
  {
        if (* format != '%')
       {
           UART_SEND_BYTE(format++);
           continue;
       }
       switch (*(++format))
      {
          case 's':
          case 'S':   
               s = uart_va_arg(ap, char *);
               for ( ; *s; s++)
              {
                  UART_SEND_BYTE(s);
              }
              break;
   
         case 'c':
         case 'C':   
             UART_SEND_BYTE(uart_va_arg(ap, char));   
             break;
   
         case 'd':
         case 'D':
            d = uart_va_arg(ap, int);
            if(d==0)
           {
                 UART_SEND_BYTE(zero);
           }
           else
           {
                while(d!=0)
               {
                    ch =d%10 +'0';
                    d/=10;
                    i++;
                }            
               for(; i > 0; i--)
                   UART_SEND_BYTE(&ch[i -1]);   
        }   
       break;
      
       case 'x':
       case 'X':   
            x = uart_va_arg(ap, int);
            for(i = 0; i < sizeof(int) * 2; i++)
           {
                ch = (unsigned char)(x&0x0f) + '0';
               if(ch > '9')
               ch += 7;
               x >>= 4;  
            }

           ch[i++]  = 'x';
            ch  = '0';

            for(i = sizeof(int) * 2 + 2; i > 0; i--)
                 UART_SEND_BYTE(&ch[i -1]);
            break;
   
       default:
           UART_SEND_BYTE(format);
       break;
     }
     format++;
  }
  uart_va_end(ap);
}

dsp.JPG (219.72 KB )

dsp.JPG

dsp.JPG (219.72 KB )

dsp.JPG

相关帖子

沙发
badfong|  楼主 | 2016-3-2 15:44 | 只看该作者
没人在么

使用特权

评论回复
板凳
zhangmangui| | 2016-3-2 22:51 | 只看该作者
没这么玩过   将代码烧写后  通过串口打印   串口是通过JTAG来的吗  
还是通过SCI啊    串口一次最多传一个字节啊   

使用特权

评论回复
地板
badfong|  楼主 | 2016-3-3 08:34 | 只看该作者
zhangmangui 发表于 2016-3-2 22:51
没这么玩过   将代码烧写后  通过串口打印   串口是通过JTAG来的吗  
还是通过SCI啊    串口一次最多传一个 ...

就是通过SCI啊,不是jtag

使用特权

评论回复
5
zhangmangui| | 2016-3-3 21:48 | 只看该作者
你想传16bie是吧     你那个截图显示很清楚   是8bit数据

使用特权

评论回复
6
badfong|  楼主 | 2016-3-8 21:44 | 只看该作者
已经解决了,ARM内存是8位的,DSP内存是16位的,在CCS3.1编译器上int和char都是16位,所以代码直接移植过来有问题。

使用特权

评论回复
7
zhangmangui| | 2016-3-8 21:45 | 只看该作者
badfong 发表于 2016-3-8 21:44
已经解决了,ARM内存是8位的,DSP内存是16位的,在CCS3.1编译器上int和char都是16位,所以代码直接移植过来 ...

请查看我的帖子
https://bbs.21ic.com/icview-556056-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝