打印

STR9 DMA->CC寄存器问题

[复制链接]
2846|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zljun|  楼主 | 2007-4-6 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA->CC寄存器的第12~1是否表示TransferSize?如果要传送n个数据,是否应当往里面写n?

当我往DMA->CC寄存器写数时,其他位成功了,而第12~1读出来的是0。
有人遇上这样的问题吗?
沙发
zljun|  楼主 | 2007-4-6 17:17 | 只看该作者

测试代码

我的代码如下:
  DMA_DeInit(); 
  DMA_Cmd(ENABLE); 
  DMA_ChannelCmd (DMA_Channel1,DISABLE);
  DMA_Channel1->CC = 0x11223344;
  cc = DMA_Channel1->CC;
  UART_SendData(UART2, cc>>24);
  UART_SendData(UART2, cc>>16);
  UART_SendData(UART2, cc>>8);
  UART_SendData(UART2, cc);               
  DMA_ChannelCmd (DMA_Channel1,ENABLE);  
  
  while(1);

使用特权

评论回复
板凳
zljun|  楼主 | 2007-4-6 17:22 | 只看该作者

结果

结果:
从串口受到0x11,0x22,0x30,0x0四个字节。

如果将DMA_Channel1->CC = 0x11223344;
改成:DMA_Channel1->CC = 0xFFFFFFFF;

从串口收到0xFF,0xFF,0xF0,0x0四个字节。

结论:
STR9 DMA->CC寄存器的低12位不能写。
请问个位是怎样写这个寄存器呢?

使用特权

评论回复
地板
zljun|  楼主 | 2007-4-6 17:39 | 只看该作者

完整代码

还是把完整的测试代码贴出来吧:
void SCU_Configuration(void);
void GPIO_Configuration(void);
void UART_Configuration(u16 baud);
int main()

  
  #ifdef DEBUG
    debug();
  #endif
  u32 cc;
        
  SCU_Configuration();
  GPIO_Configuration();             
  UART_Configuration(38400);  
  
  UART_SendData(UART2, 0x55);
  UART_SendData(UART2, 0x77);      
    
  DMA_DeInit(); 
  DMA_Cmd(ENABLE); 
  DMA_ChannelCmd (DMA_Channel0,DISABLE);
  DMA_Channel0->CC = 0xFFFFFFFF;
  cc = DMA_Channel0->CC;
  UART_SendData(UART2, cc>>24);
  UART_SendData(UART2, cc>>16);
  UART_SendData(UART2, cc>>8);
  UART_SendData(UART2, cc);               
  DMA_ChannelCmd (DMA_Channel0,ENABLE);  
  
  while(1);
 
}
void SCU_Configuration(void)
{  
     
  SCU_MCLKSourceConfig(SCU_MCLK_OSC);
  SCU_PLLCmd(DISABLE);
  SCU_RCLKDivisorConfig(SCU_RCLK_Div1);
  SCU_PCLKDivisorConfig(SCU_PCLK_Div1);
  SCU_HCLKDivisorConfig(SCU_HCLK_Div1);
  SCU_FMICLKDivisorConfig(SCU_FMICLK_Div1);
  SCU_EMIBCLKDivisorConfig(SCU_EMIBCLK_Div1);
  SCU_PLLFactorsConfig(125, 12, 3);//48M   
  SCU_PLLCmd(ENABLE);
  SCU_MCLKSourceConfig(SCU_MCLK_PLL); 
  
  /* Enable the UART2 Clock */
  SCU_APBPeriphClockConfig(__UART2, ENABLE);
  UART_DeInit(UART2);

  /* Enable the GPIO Clock */
  SCU_APBPeriphClockConfig(__GPIO0, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO1, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO2, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO3, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO4, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO5, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO6, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO7, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO8, ENABLE);
  SCU_APBPeriphClockConfig(__GPIO9, ENABLE);
    
  /* Enable the clock for DMA*/
  SCU_AHBPeriphClockConfig(__DMA,ENABLE); 
  DMA_DeInit(); 
  
}

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  
  GPIO_DeInit(GPIO0);
  GPIO_DeInit(GPIO1);
  GPIO_DeInit(GPIO2);
  GPIO_DeInit(GPIO3);
  GPIO_DeInit(GPIO4);
  GPIO_DeInit(GPIO5);
  GPIO_DeInit(GPIO6);  
  GPIO_DeInit(GPIO7);  
  GPIO_DeInit(GPIO8);
  GPIO_DeInit(GPIO9);
    
  /* Gonfigure SPI1 As GPIO*/
  /* CLK(P3.4)、MOSI(P3.6) As Output */
  GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_6;
  GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;
  GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;
  GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2;
  GPIO_Init (GPIO3, &GPIO_InitStructure);
  /* MISO(P3.5) As Input */
  GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;
  GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;
  GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1;
  GPIO_Init (GPIO3, &GPIO_InitStructure);
  /* CS(P3.7) As Output1 */
  GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;
  GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable;
  GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt1;
  GPIO_Init (GPIO3, &GPIO_InitStructure); 
  
  /* Gonfigure UART2 */
  /*Gonfigure UART2_Tx pin GPIO3.0*/
  GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;
  GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;
  GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2;
  GPIO_Init (GPIO3, &GPIO_InitStructure);  
  /*Gonfigure UART2_Rx pin GPIO3.1*/
  GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ;
  GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;
  GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1;
  GPIO_Init (GPIO3, &GPIO_InitStructure);
      
}
void UART_Configuration(u16 baud)
{
  UART_InitTypeDef UART_InitStruct;
  
  /* UART Structure Initialization */
  UART_StructInit(&UART_InitStruct);
  
  /* UART Configuration */
  UART_InitStruct.UART_WordLength = UART_WordLength_8D;
  UART_InitStruct.UART_StopBits = UART_StopBits_1;
  UART_InitStruct.UART_Parity = UART_Parity_No ;
  UART_InitStruct.UART_BaudRate = baud;
  UART_InitStruct.UART_HardwareFlowControl = UART_HardwareFlowControl_None;
  UART_InitStruct.UART_Mode = UART_Mode_Tx_Rx;
  UART_InitStruct.UART_FIFO = UART_FIFO_Disable; 
  UART_Init(UART2, &UART_InitStruct);  
  
  UART_ITConfig(UART2, UART_IT_Receive, ENABLE);
  VIC_Config(UART2_ITLine, VIC_IRQ, 4);
  VIC_ITCmd(UART2_ITLine, ENABLE);
  
  UART_Cmd(UART2, ENABLE);// Enable the UART2
}

使用特权

评论回复
5
stf| | 2007-5-11 15:43 | 只看该作者

DMA Application note

你好

st网页上有一个"DMA Application note"可以下载

也有一些例子(两个例子是永串口)

Best Regards,
Stephane

使用特权

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

本版积分规则

17

主题

55

帖子

0

粉丝