就是用MSP432P401R的DMA乒乓模式怎么连续传输ADC采集的数据。下面是程序,不能实现功能,有些错误,请大神指教。#include "u_dma.h"#include <ti/devices/msp432p4xx/driverlib/driverlib.h>#include "uart_calc.h"#include "ADC.h"#define DAM_SIZE 8000/@@* DMA Control Table 这一段是必须要有的*/#if defined(__TI_COMPILER_VERSION__)#pragma DATA_ALIGN(controlTable 1024)#elif defined(__IAR_SYSTEMS_ICC__)#pragma data_alignment=1024#elif defined(__GNUC__)__attribute__ ((aligned (1024)))#elif defined(__CC_ARM)__align(1024)#endifuint8_t controlTable[1024];volatile int switch_data = 0;uint32_t k=0;uint8_t data_array1[DAM_SIZE];extern void delay(uint16_t z);void DMA_confing(void){ MAP_WDT_A_holdTimer(); //关闭看门狗 memset(data_array1 0x11 DAM_SIZE); //目标数组初始化 // printf("123\n"); GPIO_setAsOutputPin(GPIO_PORT_P1GPIO_PIN0); GPIO_setAsOutputPin(GPIO_PORT_P2GPIO_PIN1); GPIO_setOutputHighOnPin(GPIO_PORT_P1GPIO_PIN0); DMA_enableModule(); //使能DMA模块 DMA_setControlbase(controlTable); //设置控制表基地址 DMA_disableChannelAttribute(DMA_CH7_ADC14 UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST | UDMA_ATTR_HIGH_PRIORITY | UDMA_ATTR_REQMASK); //禁用通道特征 DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH7_ADC14UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); //设置通道控制参数 ADC映射 主数据结构 8位数据大小 源地址增量 目标地址增量 传输数量 DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH7_ADC14UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0]data_array1 DAM_SIZE); //设置通道传输参数 ADC映射 主数据结构 乒乓模式 源数据 目标数据 传输数量 DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH7_ADC14UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); //设置通道控制参数 ADC映射 主数据结构 8位数据大小 源地址增量 目标地址增量 传输数量 DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH7_ADC14UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0]data_array1 DAM_SIZE); //设置通道传输参数 ADC映射 主数据结构 乒乓模式 源数据 目标数据 传输数量 DMA_requestChannel(7); //通道7请求传输 DMA_assignChannel(DMA_CH7_ADC14); //指定外设映射 DMA_assignInterrupt(DMA_INT1 7); Interrupt_enableInterrupt(INT_DMA_INT1); DMA_clearInterruptFlag(7); Interrupt_enableMaster(); DMA_enableChannel(7); ADC14_enableConversion(); } /@@***DMA传输完成中断*****/void DMA_INT1_IRQHandler(void){ GPIO_setOutputHighOnPin(GPIO_PORT_P2GPIO_PIN1); //GPIO_toggleOutputOnPin(GPIO_PORT_P2GPIO_PIN1); //delay(100); //GPIO_toggleOutputOnPin(GPIO_PORT_P2GPIO_PIN1); DMA_requestChannel(7); //通道7请求传输 DMA_assignChannel(DMA_CH7_ADC14); //指定外设映射 DMA_assignInterrupt(DMA_INT1 7); Interrupt_enableInterrupt(INT_DMA_INT1); DMA_clearInterruptFlag(7); Interrupt_enableMaster(); DMA_enableChannel(7); ADC14_enableConversion(); printf("%d%d%d\n"data_array1[k++]data_array1[k++]data_array1[k++]); //GPIO_setOutputLowOnPin(GPIO_PORT_P2GPIO_PIN1); /@@* Switch between primary and alternate bufferes with DMA's PingPong mode */ if (DMA_getChannelAttribute(7) & UDMA_ATTR_ALTSELECT) { DMA_setChannelControl(UDMA_PRI_SELECT | DMA_CH7_ADC14 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); DMA_setChannelTransfer(UDMA_PRI_SELECT | DMA_CH7_ADC14 UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0] data_array1 DAM_SIZE); switch_data = 1; printf("%d%d%d\n"data_array1[k++]data_array1[k++]data_array1[k++]); DMA_requestSoftwareTransfer(0); } else { DMA_setChannelControl(UDMA_ALT_SELECT | DMA_CH7_ADC14 UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 | UDMA_ARB_1); DMA_setChannelTransfer(UDMA_ALT_SELECT | DMA_CH7_ADC14 UDMA_MODE_PINGPONG (void*) &ADC14->MEM[0] data_array1 DAM_SIZE); switch_data = 0; printf("%d%d%d\n"data_array1[k++]data_array1[k++]data_array1[k++]); DMA_requestSoftwareTransfer(0); } }
msp430定时器A有7种输出模式可产生不同的PWM信号,我想问一下这个输出模式6,和7有啥不一样,或者说他们在手册上给的波形图是一样的,是不是表示他两只能产生一样的PWM信号。
最近想通过Multisim反正一些瞬态的波形如RC复位电路,哪位大神可以指点一下,我入门。谢谢
TI运动手表ez430chronos套件的编程器找不到了,想玩玩手表(CC430),可以用哪个开发板上的编程器替代,手里有MSP430G2,CC3200,FR3XX
最近想玩玩大气压传感器,想起手上还有TI的Chronos手表套件,上边有个大气压传感器,但是CCS开发环境不好用,求推荐类似arduino那样的,简单粗暴无脑的开发环境,当然得带ez430-Chronos库函数的,energia好像不支持CC430吧?
总是显示串口不存在,请问各位大佬有没有遇到过这种情况,江湖救急如果有其他方法下载的也行
(1)MSP430单片机系列,有4种型号。两款Flash系列,两款铁电FRAM系列。~MSP-EXP430F5529LP~MSP-EXP430G2ET~MSP-EXP430FR5994~MSP-EXP430FR6989(2)ARM系列处理器,有3款。ARM Cortex M4F内核,带浮点运算单元。~MSP-EXP432P401R~MSP-EXP432E401Y~EK-TM4C123GXL(3)DSP有两款,都是C2000系列。~LAUNCHXL-F28027F~LAUNCHXL-F28069M
之前使用P1.4到P1.7作为数据输出到LCD我已经成功但是通过改变引脚即P1.2到P1.5作为我的数据输出引脚到LCD,它就不起作用了。这是什么问题,谢谢,下面是我的代码。#define CMD 0#define DATA 1#define LCD_OUT P1OUT#define LCD_DIR P1DIR#define D4 BIT4#define D5 BIT5#define D6 BIT6#define D7 BIT7#define RS BIT2#define EN BIT3// Delay function for producing delay in 0.1 ms incrementsvoid delay(uint8_t t){uint8_t i;for(i=t; i > 0; i--)__delay_cycles(100);}// Function to pulse EN pin after data is writtenvoid pulseEN(void){LCD_OUT |= EN;delay(1);LCD_OUT &= ~EN;delay(1);}//Function to write data/command to LCDvoid lcd_write(uint8_t value uint8_t mode){if(mode == CMD)LCD_OUT &= ~RS; // Set RS -> LOW for Command modeelseLCD_OUT |= RS; // Set RS -> HIGH for Data modeLCD_OUT = ((LCD_OUT & 0x0F) | (value & 0xF0)); // Write high nibble firstpulseEN();delay(1);LCD_OUT = ((LCD_OUT & 0x0F) | ((value << 4) & 0xF0)); // Write low nibble nextpulseEN();delay(1);}// Function to print a string on LCDvoid lcd_print(char *s){while(*s){lcd_write(*s DATA);s++;}}// Function to move cursor to desired position on LCDvoid lcd_setCursor(uint8_t row uint8_t col){const uint8_t row_offsets[] = { 0x00 0x40};lcd_write(0x80 | (col + row_offsets[row]) CMD);delay(1);}// Initialize LCDvoid lcd_init(){//P2SEL &= ~(BIT6+BIT7);LCD_DIR |= (D4+D5+D6+D7+RS+EN);LCD_OUT &= ~(D4+D5+D6+D7+RS+EN);delay(150); // Wait for power up ( 15ms )lcd_write(0x33 CMD); // Initialization Sequence 1delay(50); // Wait ( 4.1 ms )lcd_write(0x32 CMD); // Initialization Sequence 2delay(1); // Wait ( 100 us )// All subsequent commands take 40 us to execute except clear & cursor return (1.64 ms)lcd_write(0x28 CMD); // 4 bit mode 2 linedelay(1);lcd_write(0x0F CMD); // Display ON Cursor ON blink ONdelay(1);lcd_write(0x01 CMD); // Clear screendelay(20);lcd_write(0x06 CMD); // Auto Increment Cursordelay(1);lcd_setCursor(00); // Goto Row 1 Column 1}void main(void){WDTCTL = WDTPW + WDTHOLD; // stop watchdoglcd_init();lcd_setCursor(05);lcd_print("hello");// lcd_setCursor(15);//lcd_print("lcd");lcd_setCursor(00);while(1);}