关于STM32DMA寄存器的位操作测试不行?其它外设可以用!

532250972   2009-5-13 12:28 楼主
                                 不知道 STM32 的DMA 有没有位操作! 如果去写相应的位 MCU 就死掉了! 

回复评论 (21)

DDDD

帮忙确认下可以用不? 
  #define DMA1_Channel3_CCR_EN      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (0*4))))
  #define DMA1_Channel3_CCR_TCIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (1*4))))
  #define DMA1_Channel3_CCR_HTIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (2*4))))
  #define DMA1_Channel3_CCR_TEIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (3*4))))
  #define DMA1_Channel3_CCR_DIR      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (4*4))))
  #define DMA1_Channel3_CCR_CIRC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (5*4))))
  #define DMA1_Channel3_CCR_PINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (6*4))))
  #define DMA1_Channel3_CCR_MINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (7*4))))
  #define DMA1_Channel3_CCR_PSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (8*4))))
  #define DMA1_Channel3_CCR_PSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (9*4))))
  #define DMA1_Channel3_CCR_MSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (10*4))))
  #define DMA1_Channel3_CCR_MSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (11*4))))
  #define DMA1_Channel3_CCR_PL0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (12*4))))
  #define DMA1_Channel3_CCR_PL1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (13*4))))
  #define DMA1_Channel3_CCR_MEM2MEM      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (14*4))))
点赞  2009-5-13 12:32

没人响应???

                                 没人响应???
点赞  2009-5-13 13:59

没人知道??? DMA 不用 位段操作就完全正常!

                                  
点赞  2009-5-13 17:26

请楼主再说详细一点

                                 你在操作DMA寄存器的哪个位时MCU死掉了?你是如何操作的?你是如何判断MCU死掉了?
点赞  2009-5-13 17:35

DD

DMA1_Channel2_CCR &= 0xFFFFFFFE ;  这样操作就 OK 程序运行正常!

DMA1_Channel2_CCR_EN   = 0 ;   用位段操作 位 0 就程序 死了!
 怎么死的我不清楚! 用用 ISP 下载下去跑的 !

#define DMA1_Channel2_CCR_EN      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (0*4)))) 

这是 CCR 位 0 地定义!  后来测试了下! 只要是 DMA 的 位都不正常! 不知道怎么会事?
点赞  2009-5-13 17:44

DD

                                 我操作 GPIO SPI USART 其它都用了 位段 那些都是可以的! 
点赞  2009-5-13 17:46

香主帮忙看看! 现在不用位段操作整个程序是没问题的!

                                 就是那个操作改成位段操作就出了问题? 
点赞  2009-5-13 17:52

DD

 /***************************************************************************
 ** DMA1
 ***************************************************************************/
  #define DMA1_ISR    (*((volatile unsigned long *) DMA1_BASE ))
  #define DMA1_IFCR    (*((volatile unsigned long *) (DMA1_BASE+4) ))

  #define DMA1_ISR_GIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (0*4))))
  #define DMA1_ISR_TCIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (1*4))))
  #define DMA1_ISR_HTIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (2*4))))
  #define DMA1_ISR_TEIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (3*4))))
  #define DMA1_ISR_GIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (4*4))))
  #define DMA1_ISR_TCIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (5*4))))
  #define DMA1_ISR_HTIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (6*4))))
  #define DMA1_ISR_TEIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (7*4))))
  #define DMA1_ISR_GIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (8*4))))
  #define DMA1_ISR_TCIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (9*4))))
  #define DMA1_ISR_HTIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (10*4))))
  #define DMA1_ISR_TEIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (11*4))))
  #define DMA1_ISR_GIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (12*4))))
  #define DMA1_ISR_TCIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (13*4))))
  #define DMA1_ISR_HTIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (14*4))))
  #define DMA1_ISR_TEIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (15*4))))
  #define DMA1_ISR_GIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (16*4))))
  #define DMA1_ISR_TCIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (17*4))))
  #define DMA1_ISR_HTIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (18*4))))
  #define DMA1_ISR_TEIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (19*4))))
  #define DMA1_ISR_GIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (20*4))))
  #define DMA1_ISR_TCIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (21*4))))
  #define DMA1_ISR_HTIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (22*4))))
  #define DMA1_ISR_TEIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (23*4))))
  #define DMA1_ISR_GIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (24*4))))
  #define DMA1_ISR_TCIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (25*4))))
  #define DMA1_ISR_HTIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (26*4))))
  #define DMA1_ISR_TEIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (27*4))))

  #define DMA1_IFCR_CGIF1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (0*4))))
  #define DMA1_IFCR_CTCIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (1*4))))
  #define DMA1_IFCR_CHTIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (2*4))))
  #define DMA1_IFCR_CTEIF1    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (3*4))))
  #define DMA1_IFCR_CGIF2      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (4*4))))
  #define DMA1_IFCR_CTCIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (5*4))))
  #define DMA1_IFCR_CHTIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (6*4))))
  #define DMA1_IFCR_CTEIF2    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (7*4))))
  #define DMA1_IFCR_CGIF3      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (8*4))))
  #define DMA1_IFCR_CTCIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (9*4))))
  #define DMA1_IFCR_CHTIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (10*4))))
  #define DMA1_IFCR_CTEIF3    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (11*4))))
  #define DMA1_IFCR_CGIF4      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (12*4))))
  #define DMA1_IFCR_CTCIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (13*4))))
  #define DMA1_IFCR_CHTIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (14*4))))
  #define DMA1_IFCR_CTEIF4    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (15*4))))
  #define DMA1_IFCR_CGIF5      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (16*4))))
  #define DMA1_IFCR_CTCIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (17*4))))
  #define DMA1_IFCR_CHTIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (18*4))))
  #define DMA1_IFCR_CTEIF5    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (19*4))))
  #define DMA1_IFCR_CGIF6      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (20*4))))
  #define DMA1_IFCR_CTCIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (21*4))))
  #define DMA1_IFCR_CHTIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (22*4))))
  #define DMA1_IFCR_CTEIF6    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (23*4))))
  #define DMA1_IFCR_CGIF7      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (24*4))))
  #define DMA1_IFCR_CTCIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (25*4))))
  #define DMA1_IFCR_CHTIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (26*4))))
  #define DMA1_IFCR_CTEIF7    (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (27*4))))
 /***************************************************************************
 ** DMA1_Channel1
 ***************************************************************************/
  #define DMA1_Channel1_CCR    (*((volatile unsigned long *) DMA1_Channel1_BASE ))
  #define DMA1_Channel1_CNDTR    (*((volatile unsigned long *) (DMA1_Channel1_BASE+4) ))
  #define DMA1_Channel1_CPAR    (*((volatile unsigned long *) (DMA1_Channel1_BASE+8) ))
  #define DMA1_Channel1_CMAR    (*((volatile unsigned long *) (DMA1_Channel1_BASE+12) ))

  #define DMA1_Channel1_CCR_EN      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (0*4))))
  #define DMA1_Channel1_CCR_TCIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (1*4))))
  #define DMA1_Channel1_CCR_HTIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (2*4))))
  #define DMA1_Channel1_CCR_TEIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (3*4))))
  #define DMA1_Channel1_CCR_DIR      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (4*4))))
  #define DMA1_Channel1_CCR_CIRC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (5*4))))
  #define DMA1_Channel1_CCR_PINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (6*4))))
  #define DMA1_Channel1_CCR_MINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (7*4))))
  #define DMA1_Channel1_CCR_PSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (8*4))))
  #define DMA1_Channel1_CCR_PSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (9*4))))
  #define DMA1_Channel1_CCR_MSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (10*4))))
  #define DMA1_Channel1_CCR_MSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (11*4))))
  #define DMA1_Channel1_CCR_PL0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x08) + (12*4))))
  #define DMA1_Channel1_CCR_PL1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x08) + (13*4))))
  #define DMA1_Channel1_CCR_MEM2MEM      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (14*4))))
 /***************************************************************************
 ** DMA1_Channel2
 ***************************************************************************/
  #define DMA1_Channel2_CCR    (*((volatile unsigned long *) DMA1_Channel2_BASE ))
  #define DMA1_Channel2_CNDTR    (*((volatile unsigned long *) (DMA1_Channel2_BASE+4) ))
  #define DMA1_Channel2_CPAR    (*((volatile unsigned long *) (DMA1_Channel2_BASE+0x08) ))
  #define DMA1_Channel2_CMAR    (*((volatile unsigned long *) (DMA1_Channel2_BASE+0x0C) ))

  #define DMA1_Channel2_CCR_EN      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (0*4))))
  #define DMA1_Channel2_CCR_TCIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (1*4))))
  #define DMA1_Channel2_CCR_HTIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (2*4))))
  #define DMA1_Channel2_CCR_TEIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (3*4))))
  #define DMA1_Channel2_CCR_DIR      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (4*4))))
  #define DMA1_Channel2_CCR_CIRC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (5*4))))
  #define DMA1_Channel2_CCR_PINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (6*4))))
  #define DMA1_Channel2_CCR_MINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (7*4))))
  #define DMA1_Channel2_CCR_PSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (8*4))))
  #define DMA1_Channel2_CCR_PSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (9*4))))
  #define DMA1_Channel2_CCR_MSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (10*4))))
  #define DMA1_Channel2_CCR_MSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (11*4))))
  #define DMA1_Channel2_CCR_PL0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x1C) + (12*4))))
  #define DMA1_Channel2_CCR_PL1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x1C) + (13*4))))
  #define DMA1_Channel2_CCR_MEM2MEM      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (14*4))))
 /***************************************************************************
 ** DMA1_Channel3
 ***************************************************************************/
  #define DMA1_Channel3_CCR    (*((volatile unsigned long *) DMA1_Channel3_BASE ))
  #define DMA1_Channel3_CNDTR    (*((volatile unsigned long *) (DMA1_Channel3_BASE+4) ))
  #define DMA1_Channel3_CPAR    (*((volatile unsigned long *) (DMA1_Channel3_BASE+8) ))
  #define DMA1_Channel3_CMAR    (*((volatile unsigned long *) (DMA1_Channel3_BASE+12) ))

  #define DMA1_Channel3_CCR_EN      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (0*4))))
  #define DMA1_Channel3_CCR_TCIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (1*4))))
  #define DMA1_Channel3_CCR_HTIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (2*4))))
  #define DMA1_Channel3_CCR_TEIE      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (3*4))))
  #define DMA1_Channel3_CCR_DIR      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (4*4))))
  #define DMA1_Channel3_CCR_CIRC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (5*4))))
  #define DMA1_Channel3_CCR_PINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (6*4))))
  #define DMA1_Channel3_CCR_MINC      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (7*4))))
  #define DMA1_Channel3_CCR_PSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (8*4))))
  #define DMA1_Channel3_CCR_PSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (9*4))))
  #define DMA1_Channel3_CCR_MSIZE0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (10*4))))
  #define DMA1_Channel3_CCR_MSIZE1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (11*4))))
  #define DMA1_Channel3_CCR_PL0      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (12*4))))
  #define DMA1_Channel3_CCR_PL1      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (13*4))))
  #define DMA1_Channel3_CCR_MEM2MEM      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (14*4))))
点赞  2009-5-13 17:53

AA

                                 就是位段不行! 其它都可以! 
点赞  2009-5-13 17:54

你那几个常量的定义值是什么?

PERIPH_BB_BASE = ?
DMA1_BASE = ?
PERIPH_BASE = ?
点赞  2009-5-13 18:00

ST 库里面定义的!

/******************************************************************************/
/*                         Peripheral memory map                              */
/******************************************************************************/
/* Peripheral and SRAM base address in the alias region */
#define PERIPH_BB_BASE        ((u32)0x42000000)
#define SRAM_BB_BASE          ((u32)0x22000000)

/* Peripheral and SRAM base address in the bit-band region */
#define SRAM_BASE             ((u32)0x20000000)
#define PERIPH_BASE           ((u32)0x40000000)

/* FSMC registers base address */
#define FSMC_R_BASE           ((u32)0xA0000000)

/* Peripheral memory map */
#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE        (PERIPH_BASE + 0x20000)

#define TIM2_BASE             (APB1PERIPH_BASE + 0x0000)
#define TIM3_BASE             (APB1PERIPH_BASE + 0x0400)
#define TIM4_BASE             (APB1PERIPH_BASE + 0x0800)
#define TIM5_BASE             (APB1PERIPH_BASE + 0x0C00)
#define TIM6_BASE             (APB1PERIPH_BASE + 0x1000)
#define TIM7_BASE             (APB1PERIPH_BASE + 0x1400)
#define RTC_BASE              (APB1PERIPH_BASE + 0x2800)
#define WWDG_BASE             (APB1PERIPH_BASE + 0x2C00)
#define IWDG_BASE             (APB1PERIPH_BASE + 0x3000)
#define SPI2_BASE             (APB1PERIPH_BASE + 0x3800)
#define SPI3_BASE             (APB1PERIPH_BASE + 0x3C00)
#define USART2_BASE           (APB1PERIPH_BASE + 0x4400)
#define USART3_BASE           (APB1PERIPH_BASE + 0x4800)
#define UART4_BASE            (APB1PERIPH_BASE + 0x4C00)
#define UART5_BASE            (APB1PERIPH_BASE + 0x5000)
#define I2C1_BASE             (APB1PERIPH_BASE + 0x5400)
#define I2C2_BASE             (APB1PERIPH_BASE + 0x5800)
#define CAN_BASE              (APB1PERIPH_BASE + 0x6400)
#define BKP_BASE              (APB1PERIPH_BASE + 0x6C00)
#define PWR_BASE              (APB1PERIPH_BASE + 0x7000)
#define DAC_BASE              (APB1PERIPH_BASE + 0x7400)

#define AFIO_BASE             (APB2PERIPH_BASE + 0x0000)
#define EXTI_BASE             (APB2PERIPH_BASE + 0x0400)
#define GPIOA_BASE            (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE            (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE            (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE            (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE            (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE            (APB2PERIPH_BASE + 0x2000)
#define ADC1_BASE             (APB2PERIPH_BASE + 0x2400)
#define ADC2_BASE             (APB2PERIPH_BASE + 0x2800)
#define TIM1_BASE             (APB2PERIPH_BASE + 0x2C00)
#define SPI1_BASE             (APB2PERIPH_BASE + 0x3000)
#define TIM8_BASE             (APB2PERIPH_BASE + 0x3400)
#define USART1_BASE           (APB2PERIPH_BASE + 0x3800)
#define ADC3_BASE             (APB2PERIPH_BASE + 0x3C00)

#define SDIO_BASE             (PERIPH_BASE + 0x18000)

#define DMA1_BASE             (AHBPERIPH_BASE + 0x0000)
#define DMA1_Channel1_BASE    (AHBPERIPH_BASE + 0x0008)
#define DMA1_Channel2_BASE    (AHBPERIPH_BASE + 0x001C)
#define DMA1_Channel3_BASE    (AHBPERIPH_BASE + 0x0030)
#define DMA1_Channel4_BASE    (AHBPERIPH_BASE + 0x0044)
#define DMA1_Channel5_BASE    (AHBPERIPH_BASE + 0x0058)
#define DMA1_Channel6_BASE    (AHBPERIPH_BASE + 0x006C)
#define DMA1_Channel7_BASE    (AHBPERIPH_BASE + 0x0080)
#define DMA2_BASE             (AHBPERIPH_BASE + 0x0400)
#define DMA2_Channel1_BASE    (AHBPERIPH_BASE + 0x0408)
#define DMA2_Channel2_BASE    (AHBPERIPH_BASE + 0x041C)
#define DMA2_Channel3_BASE    (AHBPERIPH_BASE + 0x0430)
#define DMA2_Channel4_BASE    (AHBPERIPH_BASE + 0x0444)
#define DMA2_Channel5_BASE    (AHBPERIPH_BASE + 0x0458)
#define RCC_BASE              (AHBPERIPH_BASE + 0x1000)
#define CRC_BASE              (AHBPERIPH_BASE + 0x3000)

/* Flash registers base address */
#define FLASH_R_BASE          (AHBPERIPH_BASE + 0x2000)
/* Flash Option Bytes base address */
#define OB_BASE               ((u32)0x1FFFF800)

/* FSMC Bankx registers base address */
#define FSMC_Bank1_R_BASE     (FSMC_R_BASE + 0x0000)
#define FSMC_Bank1E_R_BASE    (FSMC_R_BASE + 0x0104)
#define FSMC_Bank2_R_BASE     (FSMC_R_BASE + 0x0060)
#define FSMC_Bank3_R_BASE     (FSMC_R_BASE + 0x0080)
#define FSMC_Bank4_R_BASE     (FSMC_R_BASE + 0x00A0)

/* Debug MCU registers base address */
#define DBGMCU_BASE          ((u32)0xE0042000)

/* System Control Space memory map */
#define SCS_BASE              ((u32)0xE000E000)

#define SysTick_BASE          (SCS_BASE + 0x0010)
#define NVIC_BASE             (SCS_BASE + 0x0100)
#define SCB_BASE              (SCS_BASE + 0x0D00)
点赞  2009-5-13 18:05

我用的 ST 库里面定义的

                                  
点赞  2009-5-13 18:07

位段应该没有定义错吧?

                                  
点赞  2009-5-13 18:14

香主帮忙看看! 先谢了

                                  
点赞  2009-5-13 19:00

怎么没响应啊????

                                  
点赞  2009-5-14 12:40

版主 可以帮下 解答这个问题不?

                                 我没搞明白是怎么回事
点赞  2009-5-15 10:49

楼主这样试一下

#define DMA1_Channel3_CCR_EN      (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (0*4))))

你把vu8换成vu32试试

我试过,用vu8的确进入了hardfault
因为bit-banding都是以32位字为单位的,用8位的话在有些场合可能会导致总线错误。
点赞  2009-5-15 11:38

一样的! 测试过!

                                  
点赞  2009-5-15 11:42

其他外设 都可以用 8 BIT 啊??

                                  
点赞  2009-5-15 11:43
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复