这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 瑞萨M30290FA单片机串口问题,请瑞萨工程师帮忙解决,急!

共16条 1/2 1 2 跳转至

瑞萨M30290FA单片机串口问题,请瑞萨工程师帮忙解决,急!

菜鸟
2008-05-29 11:30:24     打赏
通过RS232和电脑的串口异步通信,用labview采集数据,但是控制寄存器的内容写不进,如u0brg,使用E8调试,示波器看不到波形,麻烦指教,谢谢! #include "sfr_M16C29config.h" void delay(void); void clock_initial(void); void uarttx_initial(void); void uartrx_initial(void); void port_initial(void); void main(void) { clock_initial(); port_initial(); uarttx_initial(); //uartrx_initial(); asm("NOP"); asm("NOP"); } void clock_initial(void) //时钟初始化配置 { unsigned char i; prc1 = 1; pm20 = 0; prc1 = 0; prc0 = 1; //允许写时钟 prc2 = 1; pacr=0x03; //80引脚版本 prc1 = 1; // Enable write to PM0,PM1,PM2,TB2SC,INVC0 and INVC1 registers pm21 = 0; // System clock protective bit cm10=0;cm05=0; for(i=0; i



关键词: 瑞萨     M30290FA     单片机     串口     问题     请瑞         

助工
2008-05-29 14:00:28     打赏
2楼

希望您能发一个完整的工程文件过来。

我已经给您留言,里面有我们工程师的邮件地址。
头文件是您自己作的?可以在瑞萨网站M16C/29的网页里下载。
一般情况下是设定可能存在问题。


菜鸟
2008-05-29 15:48:54     打赏
3楼

/***********************************************************************/
/*                                                                     */
/*  FILE        :uart.c                                                */
/*  DATE        :Thu, May 27, 2008                                     */
/*  DESCRIPTION :uart program file.                                    */
/*  CPU GROUP   :M30290                                                */
/*  by          :liufeng                                               */
/*                        */
/*                                                                     */
/***********************************************************************/
#include "sfr_M16C29config.h"
void delay(void);
void clock_initial(void);
void uarttx_initial(void);
void uartrx_initial(void);
void port_initial(void);
void main(void)
{  
 clock_initial();
 port_initial();
 uarttx_initial();
 //uartrx_initial();
 asm("NOP"); 
 asm("NOP"); 
}

void clock_initial(void)     //时钟初始化配置
{
 unsigned char i;
    prc1 = 1;
 pm20 = 0;
 prc1 = 0;
 
 prc0 = 1;        //允许写时钟
 
 prc2 = 1;
 pacr=0x03;        //80引脚版本
 
 prc1 = 1;        // Enable write to PM0,PM1,PM2,TB2SC,INVC0 and INVC1 registers 
 pm21 = 0;         // System clock protective bit

 cm10=0;cm05=0;
 for(i=0; i<10; i++);
 cm15=1;                                  //High drive capacity selected(cm1 bit 5)
 cm07=0;cm21=0;cm11=0;                    //Main clock selected(cm0 bit 7,cm1 bit1,cm2 bit 1)
 cm16=0;cm17=0;cm06=1;                    //CPU clock divide by 8 selected(cm0 bit 6, cm1 bit 6 and 7)
 pclk5=0;cm01=0;cm00=0;                   //CLKout pin function as normal I/O port P90(pclkr bit 5,cm0 bit 0 and 1)

 prc0 = 1;
 pclk1 = 1;         //f1SIO set  
 prc0 = 0;         //写时钟保护,   系统时钟8分频 
}

void uarttx_initial(void)      //串口发送
{
 unsigned int trans_data;  //发送REG
 
 trans_data = 0x0011;
 u0brg = 0x81;
 ucon = 0x00;
 u0c0 = 0x30;
 u0c1 = 0x00;
 u0mr = 0x05;
 u0tb = trans_data;
  u0c1 = 0x05;
 
 
 trans_data = ucon;
 trans_data = u0c0;
 trans_data = u0c1;
 trans_data = u0tb;  
 trans_data = u0c1;   
 /*
 clk0_u0c0=0;
 clk1_u0c0=0;
 u0brg = 0x81;
 
 u0mr = 0x05;
 te_u0c1=0;
 re_u0c1=0;
 
 clk0_u0c0=0;
 clk1_u0c0=0;
 asm("NOP");
 u0brg = 0x00;        // Setting UART0 bit rate generator (Approx 9600bps @20MHz f1)必须在U0C0后  

 crd_u0c0 = 1;       //禁止CTS  RTS
  
 ucon = 0x01;
 
 u0tb = trans_data;
 u0brg = 0x81;
 

 te_u0c1=1;
 re_u0c1=1;
 
 u0brg = 0x81;
 u1brg = 0x81;
 
 ti_u0c1 = 0;
*/

 while (1)
 {
  p9_0 = 1;
  u0tb = trans_data;
  
  
  while (ti_u1c1 == 0);   //Wait for transmission buffer emty
   u0tb = trans_data;         // Set transmission data
  te_u1c1 = 1;           // Transmission enabled
  p9_0 = 0;
  trans_data++;
 } 
}

void uartrx_initial(void)     //串口接收
{
 unsigned int recevie_data;   //接收REG
 pd6_1 = 0;
 pd6_2 = 0;        //RXD direction bit
 pd6_3 = 1;        //TXD direction bit
 u0mr = 0x05;
 u0c0 = 0x00;
 u0brg = 0x81;        /* Setting UART0 bit rate generator (Approx 9600bps @20MHz f1)必须在U0C0后 */
 ucon = 0x00;
 u0c1 = 0x05;
 while (1)
 {
  while (!ri_u0c1)
   {
    ;
  }
  recevie_data = u0rb;
  asm("NOP"); 
  asm("NOP"); 
 }
}

void delay(void)       //p9_0 LED delay
{
 unsigned int j,k;
 j = 0;
 k = 0;
 for (;j<3000;j++);
 for (;k<6000;k++); 
}


void port_initial(void)
{
 prc2 = 1;         // Enable write to PD9,PACR and S4C registers
 pd9_0 = 1;        //P9 direction bit
 
 pd6_1 = 0;        // CLK direction bit
 pd6_2 = 0;        //RXD direction bit
 pd6_3 = 1;        //TXD direction bit
 
}

 

 
 


菜鸟
2008-05-29 15:54:08     打赏
4楼
头文件是瑞萨网站M16C/29的网页里下载的。

菜鸟
2008-05-29 16:21:20     打赏
5楼
trans_data = 0x0011;
 u0brg = 0x81;
 ucon = 0x00;
 u0c0 = 0x30;
 u0c1 = 0x00;
 u0mr = 0x05;
 u0tb = trans_data;
  u0c1 = 0x05; 

这一段有问题,寄存器设定顺序不对,正确的是
u0mr, u0c0, u0brg, u0c1
u0c1=0x05;   //启动发送和接收
while(ti_u0c1==0); //等待发送缓冲寄存器空
u0tb=trans_data;  //发送数据,这样数据就发出去了

菜鸟
2008-05-30 08:37:35     打赏
6楼

还是不行,是不是硬件上有特别的要求


菜鸟
2008-05-30 08:45:09     打赏
7楼

不是已经给您发了我们同事的邮箱了吗?请把工程发给我们,或者上传上来都可以。


菜鸟
2008-05-30 09:06:05     打赏
8楼

菜鸟
2008-05-30 10:07:45     打赏
9楼
led.rar 工程在此

菜鸟
2008-05-30 11:56:27     打赏
10楼
led.rar

您在u0c0的设定中,选择了“N沟开漏”输出,输出需要上拉才有信号。
ammiezhang给您改了一下,改为选择CMOS输出。

现在直接运行,可以看到波形输出。

共16条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]