色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何為MSP430設(shè)計(jì)固件以收集和處理IC的數(shù)據(jù)

科技觀察員 ? 來(lái)源:allaboutcircuits ? 作者:馬克休斯 ? 2022-05-06 17:33 ? 次閱讀

入門

如今,無(wú)需進(jìn)行一些編程就很難創(chuàng)建任何電子電路。不幸的是,您學(xué)習(xí)為一個(gè)制造商創(chuàng)建固件的知識(shí)不一定適用于另一個(gè)制造商。

出于這個(gè)原因,購(gòu)買評(píng)估板通常是一個(gè)好主意,這樣您就可以學(xué)習(xí)在一個(gè)肯定可以正常工作的板上對(duì)您的微控制器進(jìn)行編程,然后再用自己的設(shè)計(jì)來(lái)解決問(wèn)題。熟悉制造商為您提供的資源(論壇、數(shù)據(jù)表、用戶指南、視頻等)也是一個(gè)好主意。

在這種情況下,我使用了MSP430FR2633,因此我在MSP CapTIvate MCU 開(kāi)發(fā)套件上進(jìn)行了練習(xí),并向TI 的 E2E 社區(qū)尋求建議。

本文并未涵蓋源代碼的每一行;相反,它以源代碼為例提供了有關(guān)固件編程的一般信息

添加 ASCII 引腳圖

最后,我想為自己添加一些額外的參考。由于這是一個(gè)自定義板,我想在一個(gè)位置向自己提供盡可能多的信息。很有可能一個(gè)小時(shí)后我不會(huì)記得我的引腳連接是什么,而且我肯定不會(huì)記得一個(gè)星期后。如果我進(jìn)行任何編程更改,不必挖掘原理圖會(huì)很好。

出于這個(gè)原因,我在源代碼中包含了一個(gè)連接圖。網(wǎng)絡(luò)上有各種ASCII 圖表生成器,這使得操作相對(duì)快速。

//   CP2102N           ┌──────┬──────┐            ┌────────────┐
// ┌────────────┐      │      │ P1.0 │→ UCB0STE  →│ EN (NC)    │
// │    USB     │→ RX →│ P2.5 │ P1.1 │→ UCB0CLK  →│ CLK        │
// │    TO      │→ TX ←│ P2.6 │ P1.2 │→ UCBSIMO  →│ SIMO (NC)  │
// │   UART     │      │      │ P1.3 │← UCBSOMI  ←│ SOMI       │
// └────────────┘      ├──────┼──────┤            │            │
//             ST_IN1 ←│ P2.0 │ P2.4 │← BUSY     ←│ BUSY       │
//             ST_IN2 →│ P2.1 │ P3.0 │→ RDL      →│ RDL        │
//                     │      │ P3.1 │→ CNV      →│ CNV        │
//                     └──────┴──────┘            └────────────┘
//                       MSP430FR2633                 ADC

我們需要做的第一件事是處理我們的引腳,以便編譯器知道哪些設(shè)備連接到什么。為此,您需要了解寄存器的概念。如果您已經(jīng)熟悉這些概念,請(qǐng)隨意跳到下面的“定義寄存器描述快捷方式”。

什么是寄存器?

寄存器是內(nèi)存中由十六進(jìn)制數(shù)字標(biāo)識(shí)的位置,位屬于寄存器。每個(gè)寄存器中的位控制微控制器功能的特定方面。

每個(gè)寄存器控制一個(gè)字節(jié)(8 位)或一個(gè)字(16 位)。然而,為了使討論簡(jiǎn)單,下圖說(shuō)明了控制單個(gè)字節(jié)的寄存器。

poYBAGJ062yAKrccAACxq4lsMJk761.jpg

定義寄存器描述快捷方式

現(xiàn)在我們對(duì)寄存器有了非常簡(jiǎn)短的背景,讓我們?cè)谏舷挛闹惺褂盟?/p>

MSP430FR2xx 系列用戶指南中的寄存器描述指示哪些位控制哪些功能。當(dāng)寄存器不允許直接訪問(wèn)單個(gè)位時(shí),您可以將字節(jié)操作與適當(dāng)?shù)奈谎诖a結(jié)合使用;單個(gè)位可以使用“|=”運(yùn)算符設(shè)置,使用“&=”運(yùn)算符清除,或使用“^=”運(yùn)算符切換。

pYYBAGJ0626AEgesAAC2PerIoWQ479.jpg

上圖顯示了四種字節(jié)操作前后虛寄存器 W、X、Y 和 Z 中的數(shù)據(jù)。

配置位在數(shù)據(jù)表中以十六進(jìn)制或二進(jìn)制表示法提供。但是,鍵入諸如 0x3F2A &= 0xC9 之類的內(nèi)容并跟蹤程序中發(fā)生的事情是相當(dāng)不方便的。因此寄存器和引腳名稱在引用的頭文件中或在程序的開(kāi)頭定義。并且使用寄存器的名稱和與該寄存器關(guān)聯(lián)的引腳而不是原始的十六進(jìn)制和二進(jìn)制數(shù)。例如,“WDTCTL = WDTHOLD”(WatchDog Timer ConTroL 寄存器 = WatchDog Timer HOLD 值)—換句話說(shuō),停止看門狗定時(shí)器

因此,編程不再使用十六進(jìn)制地址,而是使用這些命名的快捷方式指定寄存器和位,并直接或使用字節(jié)操作(例如上面提到的那些)修改位。

void main(void)
{
    WDTCTL = (WDTPW | WDTHOLD);         // Stop watchdog timer
    …
    CSCTL3 |= SELREF__REFOCLK;          // Set REFO as FLL reference source
    CSCTL0 = 0;                         // clear DCO and MOD registers
    CSCTL1 &= ~(DCORSEL_7);             // Clear DCO frequency select bits first
    CSCTL1 |= DCORSEL_5;                // Set DCO = 16MHz
    …

命名變量——引腳的位位置

對(duì)于 MSP430,每個(gè)端口控制一組引腳 — GPIO 通常為 8 位,因此一個(gè)端口對(duì)應(yīng)一個(gè)字節(jié)。雖然您不能立即定義端口,但控制端口引腳的寄存器不可位尋址,因此無(wú)法創(chuàng)建與單個(gè)引腳對(duì)應(yīng)的名稱(例如,“#define somePinVar 1.5”)。

相反,我們將名稱附加到引腳的位位置,并使用該名稱與端口寄存器一起控制它。

首先命名引腳(它們所連接的端口將在程序后面說(shuō)明)。這可以在主程序的開(kāi)頭或在單獨(dú)的頭文件中完成。選擇變量和常量的名稱是為了便于以后理解,并基于 PCB 上相應(yīng)的網(wǎng)絡(luò)名稱。

#define UART_RX_PIN     BIT5            // P2.5 eUSCI_A1
#define UART_TX_PIN     BIT6            // P2.6 eUSCI_A1

#define SPI_EN_PIN      BIT0            // P1.0 eUSCI_B0 -- not used
#define SPI_CLK_PIN     BIT1            // P1.1 eUSCI_B0
#define SPI_MOSI_PIN    BIT2            // P1.2 eUSCI_B0 -- not used yet
#define SPI_MISO_PIN    BIT3            // P1.3 eUSCI_B0

#define ADC24_RDL       BIT0            // P3.0 set low always
#define ADC24_CNV       BIT1            // P3.1 L->H->L (20 ns) to convert
#define ADC24_BUSY      BIT4            // P2.4 goes low after conversion

#define ST_IN1          BIT0            // 3PST switch input 0
#define ST_IN2          BIT1            // 3PST switch input 1

程序的下一部分定義了使用的變量以及函數(shù)原型。我使用全局變量并將數(shù)組保留為易失性,以避免 SPI 和 UART 中斷服務(wù)例程的任何潛在問(wèn)題。本節(jié)中定義的所有變量都可用于所有函數(shù)。

// Variable Declarations
…
uint16_t numTrials;                     // number of times to repeat reads
uint16_t numReads;                      // number of conversions per read
…
uint8_t byteCounter;                    // need 24 bits + 16 bits (5 bytes)
volatile uint8_t dataBuffer[5];         // Holder for all SPI data

// Function Prototypes
void readADC(uint16_t);                 // Runs conversions
uint8_t spix(uint8_t);                  // SPI interface communication
void uartx(uint8_t);                    // UART interface communication one-way

分配引腳功能

MSP430FR2633 具有可支持多種功能的引腳。因此,必須告知 MCU 引腳是用于通用輸入/輸出還是用于UART或I 2 C等集成外設(shè)。

以下幾行代碼配置端口 2 使用,首先為 UART Tx/Rx 連接對(duì)應(yīng)的端口 2 引腳選擇備用功能(即集成外設(shè)),然后配置 UART_TX 引腳和兩個(gè)自檢開(kāi)關(guān)引腳作為輸出。

    // Select module function for UART (page 63)
    P2SEL0 |= (UART_TX_PIN | UART_RX_PIN);
    // Set port pins as output for UART and SP3T Switch
    P2DIR |= (UART_TX_PIN | ST_IN1 | ST_IN2);

自定義函數(shù)

自定義函數(shù)用于讀取 ADC — 基本上只是切換啟動(dòng)轉(zhuǎn)換標(biāo)志,等待繁忙指示器關(guān)閉,然后再次切換啟動(dòng)轉(zhuǎn)換標(biāo)志 — 由在開(kāi)始時(shí)設(shè)置的常數(shù)所指示的次數(shù)該程序。

void readADC(uint16_t numReads)
{
// Start conversion, wait for busy flag to turn off,
// and start the next conversion.
    for (counter = 1; counter <= numReads; counter++)
    {
        P3OUT ^= ADC24_CNV;     // Toggle convert flag high > 20 ns to start
        __delay_cycles(1);      // measurement.  1/16MHz * 1 cycles = 62.5 ns
        P3OUT &= ~ADC24_CNV;    // Set convert flag back low
// Wait to let conversion finish - might never enter function
        while ((P2IN & ADC24_BUSY))
        {
            __delay_cycles(1);     // 1/16Mhz = 62.5 ns
        }
    }

收集數(shù)據(jù)

數(shù)據(jù)將從我的微控制器中出來(lái),并通過(guò) USB 快速傳輸?shù)?PC。如果我在通過(guò) UART 到 USB 轉(zhuǎn)換器發(fā)送數(shù)據(jù)之前將此數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制等效值或度/分/秒,則很難看到數(shù)據(jù)以每秒約 100 行的速度滾動(dòng)時(shí)有多穩(wěn)定。相反,我們將數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制。

通過(guò)將數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制,我可以在串行監(jiān)視器中快速查看有多少未更改的位,只需從左側(cè)開(kāi)始計(jì)數(shù)。一旦位開(kāi)始變化,我就會(huì)遇到噪音(當(dāng)然,假設(shè)傳感器完全靜止)。數(shù)據(jù)以我在完整程序中用制表符分隔的塊的形式出現(xiàn):三個(gè)字節(jié)用于角度數(shù)據(jù),兩個(gè)字節(jié)用于每次讀取的樣本數(shù)(我后來(lái)又添加了兩個(gè)字節(jié)來(lái)創(chuàng)建一個(gè)計(jì)數(shù)器)。

    for (byteCounter = 0; byteCounter < 5; byteCounter++) //0,1,2,3,4
    { for (bitCounter = 0; bitCounter < 8; bitCounter++)
        { if (((dataBuffer[byteCounter] >> (7 - bitCounter)) & 0b1) == 0)
            { uartx('0'); // ASCII 0 }
            Else { uartx('1'); // Ascii 1 }
        }

您會(huì)注意到我必須更改每個(gè)字節(jié)的“字節(jié)順序”,以便它首先到達(dá) UART MSB。

poYBAGJ062-AFzz5AAEvGUgHSms319.jpg

樣本數(shù)據(jù)顯示了 ADC 讀數(shù)的一列、自上次數(shù)據(jù)傳輸以來(lái)讀取的讀數(shù)數(shù)量以及一個(gè)計(jì)數(shù)器。

使用 Mathematica 處理數(shù)據(jù)

在最終程序中,我最終添加了一個(gè)試用計(jì)數(shù)器并使用Mathematica(在Rasbian OS上免費(fèi))處理數(shù)據(jù)。未來(lái)的文章將更詳細(xì)地解釋數(shù)據(jù)和數(shù)據(jù)處理。

poYBAGJ063OAYDIFAAl2IAhUsLc016.gif

初步試驗(yàn)的數(shù)據(jù)如上所示。帶有彩色三角形的垂直刻度顯示三個(gè)縮放級(jí)別的最大值、+1σ、平均值、-1σ 和最小值。還包括散點(diǎn)圖、直方圖及其伴隨的理想化正態(tài)分布。

本文解釋了該項(xiàng)目的一小部分固件編程。下一篇文章將描述設(shè)備中的噪聲,未來(lái)的文章將分析數(shù)據(jù)。

您將在下面找到 MCU 上程序的完整源代碼的可下載文件。如果您也有興趣訪問(wèn) Mathematica 源代碼文件,請(qǐng)?jiān)谙旅娴脑u(píng)論中告訴我!

Precision_Inclinometer_Firmware.zip

//         _ _          _                 _    _____ _                _ _
//   /\   | | |   /\   | |               | |  / ____(_)              (_) |
//  /  \  | | |  /  \  | |__   ___  _   _| |_| |     _ _ __ ___ _   _ _| |_ ___
// / /\ \ | | | / /\ \ | '_ \ / _ \| | | | __| |    | | '__/ __| | | | | __/ __|
/// ____ \| | |/ ____ \| |_) | (_) | |_| | |_| |____| | | | (__| |_| | | |_\__ \
//_/    \_\_|_/_/    \_\_.__/ \___/ \__,_|\__|\_____|_|_|  \___|\__,_|_|\__|___/
//                      _____         _         __    _____         _
//                     |     |___ ___| |_    __|  |  |  |  |_ _ ___| |_ ___ ___
//                     | | | | .'|  _| '_|  |  |  |  |     | | | . |   | -_|_ -|
//                     |_|_|_|__,|_| |_,_|  |_____|  |__|__|___|_  |_|_|___|___|
//                     w/ support by Bruce McKenney            |___|  2018/11/09
//            _ __
//           ' )  )   _/_
//  ______ . ./--'__. / __.
// / / / <(_//  \(_/|<_(_/|_
//  __ __ _  ___ __   __ __ _  __  _  _ ____ ____ ____ ____
// (  |  ( \/ __|  ) (  |  ( \/  \( \/ |  __|_  _|  __|  _ \
//  )(/    ( (__/ (_/\)(/    (  O ) \/ \) _)  )(  ) _) )   /
// (__)_)__)\___)____(__)_)__)\__/\_)(_(____)(__)(____|__\_)
//
/****************************** Connection Diagram ****************************/
//   CP2102N           ┌──────┬──────┐            ┌────────────┐
// ┌────────────┐      │      │ P1.0 │→ UCB0STE  →│ EN (NC)    │
// │    USB     │→ RX →│ P2.5 │ P1.1 │→ UCB0CLK  →│ CLK        │
// │    TO      │→ TX ←│ P2.6 │ P1.2 │→ UCBSIMO  →│ SIMO (NC)  │
// │   UART     │      │      │ P1.3 │← UCBSOMI  ←│ SOMI       │
// └────────────┘      ├──────┼──────┤            │            │
//             ST_IN1 ←│ P2.0 │ P2.4 │← BUSY     ←│ BUSY       │
//             ST_IN2 →│ P2.1 │ P3.0 │→ RDL      →│ RDL        │
//                     │      │ P3.1 │→ CNV      →│ CNV        │
//                     └──────┴──────┘            └────────────┘
//                       MSP430FR2633                 ADC
/********************************* Description ********************************/
// by Mark Hughes for AllAboutCircuits.com.  Find complete information for this
// project at http://allaboutcircuits.com/author/mark-hughes
// This is a one-directional SPI to UART to USB bridge interface
// CNV is toggled one/multiple times (up to 65535) and data is averaged inside
// the ADC until SPI_CLK toggles data out and into MSP430.  Data is then sent
// via UART to CP2102N at 115200, and then from the CP2102N to the computer.
// The data is sent over UART in Binary format MSB first using ASCII characters.
// self-test and auto-calibration not yet implemented.
// When ST_IN1 != ST_IN2, enters self-test mode for sensor
/*********************************** Headers **********************************/
#include 
#include 
#include 

/******************************* Pin Definitions ******************************/
#define UART_RX_PIN     BIT5            // P2.5 eUSCI_A1
#define UART_TX_PIN     BIT6            // P2.6 eUSCI_A1

#define SPI_EN_PIN      BIT0            // P1.0 eUSCI_B0 -- not used
#define SPI_CLK_PIN     BIT1            // P1.1 eUSCI_B0
#define SPI_MOSI_PIN    BIT2            // P1.2 eUSCI_B0 -- not used yet
#define SPI_MISO_PIN    BIT3            // P1.3 eUSCI_B0

#define ADC24_RDL       BIT0            // P3.0 set low always
#define ADC24_CNV       BIT1            // P3.1 L->H->L (20 ns) to convert
#define ADC24_BUSY      BIT4            // P2.4 goes low after conversion

#define ST_IN1          BIT0            // 3PST switch input 0
#define ST_IN2          BIT1            // 3PST switch input 1

/**************************** Variable Declarations ***************************/
// Can be consolidated and revised later with proper function calls and
// data returns later on.
uint8_t bitCounter;                     // 0-7 counter for bits in a byte.
uint8_t byteCounterSPI;                 // 0-4 counter for SPI data bytes.
uint8_t byteCounter;                    // need 24 bits + 16 bits (5 bytes)
uint16_t counter;                       // Temporary counter
uint16_t numTrials;                     // Temporary counter
uint16_t numTrialsMax = 1024;           // Number of times to repeat measurement
uint16_t numReads = 4;                  // number of conversions per read.

// Can replace volatile buffer with pointer later on.
volatile uint8_t dataBuffer[5];         // Holder for all SPI data

/****************************** Function Prototypes ***************************/
// Function Prototypes
void readADC(uint16_t);                 // Decides number of conversions
uint8_t spix(uint8_t);                  // SPI interface
void uartx(uint8_t);                    // UART interface

/******************************** Main Program ********************************/
void main(void)
{
    //********************* Begin Configuration ********************************

    WDTCTL = (WDTPW | WDTHOLD);         // Stop watchdog timer
    FRCTL0 = FRCTLPW | NWAITS_1;        // FRAM configuration for > 8 MHz
    __bis_SR_register(SCG0);            // Disable Frequency Locked Loop (FLL)
    CSCTL3 |= SELREF__REFOCLK;          // Set REFO as FLL reference source
    CSCTL0 = 0;                         // Clear DCO and MOD registers
    CSCTL1 &= ~(DCORSEL_7);             // Clear DCO frequency select bits first
    CSCTL1 |= DCORSEL_5;                // Set DCO = 16MHz
    CSCTL2 = FLLD_0 + 487;              // DCOCLKDIV = 16MHz
    __delay_cycles(3);                  // Wait to allow stabilization of clock
    __bic_SR_register(SCG0);            // Reenable FLL
    while (CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1))
        /*EMPTY*/;            // FLL locked
    // default DCOCLKDIV as MCLK and SMCLK source
    CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK;
    // Disable GPIO power-on default high-impedance mode
    PM5CTL0 &= ~LOCKLPM5;   // Disable GPIO power-on default high-impedance mode
    // PxDIR: 0(In) 1(Out)
    // PxSEL: Function Select Register (see datasheet)
    // PxOUT: 0(L) 1(H): Output Register
    // PxREN: 0(L) 1(En): Resistor Enable (on input only)

    // Select SPI module function for SPI (page 60)
    P1SEL0 |= (SPI_MISO_PIN | SPI_MOSI_PIN | SPI_CLK_PIN);
    // Set MOSI and CLK as outputs.
    P1DIR |= (SPI_MOSI_PIN | SPI_CLK_PIN);

    // Select module function for UART (page 63)
    P2SEL0 |= (UART_TX_PIN | UART_RX_PIN);
    // Set port pins for UART and SP3T Switch
    P2DIR |= (UART_TX_PIN | ST_IN1 | ST_IN2);
    // IN1/IN2 initially low to open SPST switch.
    P2OUT &= ~(ST_IN1 | ST_IN2);

    // Set port pins for ADC
    P3SEL0 &= ~(ADC24_RDL | ADC24_CNV);
    // Set direction for RDL and CNV
    P3DIR |= (ADC24_RDL | ADC24_CNV);
    // Set port output low for RDL and CNV
    P3OUT &= ~(ADC24_RDL | ADC24_CNV);

    // Setup SPI in UCB0 Control Word 0
    // Place UCB in reset state before modifying settings

    UCB0CTLW0 |= UCSWRST;
    // Master-mode, synchronous clock, inactive state high, MSB first.
    UCB0CTLW0 |= (UCMST | UCMSB | UCCKPH | UCSYNC | UCMSB | UCSSEL__SMCLK);
    // Bit clock prescaler
    UCB0BRW = 0x0002;   // Bit rate clock = SMCLK/2 = 8 MHz
    // Release reset and initialize state machine
    UCB0CTLW0 &= ~UCSWRST;

    // Put UCA state machine in reset, select mode and clock.
    UCA1CTLW0 = UCMODE_0 | UCSSEL__SMCLK | UCSWRST; // UART, SMCLK, Reset
    // 16M/(UCOS)16/9600 UCA1BRW = 104
    // UCA1BRW = 104;
    // UCBRS=0xD6, 16x oversample, UCBRF=2
    // UCA1MCTLW = (0xD6 << 8) | UCOS16 | UCBRF_2;
    // 16M/(UCOS)16/115200 UCA1BRW = 8;
    UCA1BRW = 8; // 115200 Baud.
    UCA1MCTLW = (0xD6 << 8) | UCOS16 | UCBRF_11;  // 115200 Baud.

    // Release reset and initialize state machine
    UCA1CTLW0 &= ~UCSWRST;

    /**************************** End Configuration ***************************/

    /****************************** Main Program ******************************/
    // Read the ADC a certain number of times.  Toggle ST_IN1 and ST_IN2 to
    // flash LED after certain number of reads.
    for (numTrials = 1; numTrials <= numTrialsMax; numTrials++)
    {
        // Turn LEDS on/off every 100 trials
        if (numTrials % 100 == 1)
        {
            P2OUT ^= (ST_IN1 | ST_IN2);
        }
        __delay_cycles(1);
        readADC(numReads);              // Perform n conversions
    }
    // Turn LEDS off because numTrials likely didn't.
    P2OUT &= ~(ST_IN1 | ST_IN2);

    // Add an additional carriage return and newline.
    uartx('\r'); // Carriage return
    uartx('\n'); // Newline
// End main.
}

/**************************** Function to read ADC ****************************/
void readADC(uint16_t numReads)
{
// Start conversion, wait for busy to turn off, and start the next conversion.
    for (counter = 1; counter <= numReads; counter++)
    {
        P3OUT ^= ADC24_CNV;     // Toggle convert flag high > 20 ns to start
        __delay_cycles(1);      // measurement.  1/16MHz * 1 cycles = 62.5 ns
        P3OUT &= ~ADC24_CNV;    // Set convert flag back low

        // Wait to let conversion finish - might never enter function
        while ((P2IN & ADC24_BUSY))
        {
            __delay_cycles(1);     // 1/16Mhz = 62.5 ns
        }
    }

    // Shift out dummy bytes to allow ADC data to shift into dataBuffer[]
    for (byteCounterSPI = 0; byteCounterSPI < 5; byteCounterSPI++)
    {   // Shift out useless data to allow shift in of ADC data.
        dataBuffer[byteCounterSPI] = spix(0xFF);
    }

    // Find binary equivalent of each dataBuffer byte.  Send it out over UART.
    // Each byte is shifted to the right n-bits and the LSB is read as 1 or 0
    // (7 - bitCounter) is used to change Endianess.
    for (byteCounter = 0; byteCounter < 5; byteCounter++) //0,1,2,3,4
    {
        for (bitCounter = 0; bitCounter < 8; bitCounter++) //0,1,2,3,4,5,6,7
        {
            // Need to change endianness of data before sending out UART
            if (((dataBuffer[byteCounter] >> (7 - bitCounter)) & 0b1) == 0)
            {
                uartx('0'); // ASCII 0
            }
            else
            {
                uartx('1'); // Ascii 1
            }
        }

        // Data Formatting
        if (byteCounter == 2)
        {
            // After the three data-bytes, add a tab to separate number of reads
            uartx('\t'); // Ascii tab
        }

        // After the last byte is out, send a carriage return and line feed.
        if (byteCounter == 4)
        {
            uartx('\t');

            for (bitCounter = 0; bitCounter < 16; bitCounter++)
            {
                if (((numTrials >> (15 - bitCounter)) & 0b1) == 0)
                {
                    uartx('0'); // ASCII 0
                }
                else
                {
                    uartx('1'); // Ascii 1
                }
            }

            uartx('\r'); // Return
            uartx('\n'); // Line Feed
        }
    }
    return;
}

uint8_t spix(uint8_t c)
{
    while (!(UCB0IFG & UCTXIFG))
        /*EMPTY*/;
    UCB0TXBUF = c;
    while (!(UCB0IFG & UCRXIFG))
        /*EMPTY*/;
    c = UCB0RXBUF;
    return (c);
}

void uartx(uint8_t c)
{
    while (!(UCA1IFG & UCTXIFG))
        /*EMPTY*/;
    UCA1TXBUF = c;
    return;

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7565

    瀏覽量

    151574
  • msp430
    +關(guān)注

    關(guān)注

    180

    文章

    2403

    瀏覽量

    229393
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5074

    瀏覽量

    97661
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MSP430

    單片機(jī)msp430MSP430F149mspMSP430單片機(jī)
    訇銘2011
    發(fā)布于 :2022年02月14日 21:10:09

    FPGA與MSP430系統(tǒng)

    大家好,最近對(duì)項(xiàng)目有一個(gè)新的想法,就是想用FPGA和MSP430組成一個(gè)新系統(tǒng),MSP430做主控芯片,F(xiàn)PGA用來(lái)接受高速AD的轉(zhuǎn)換的數(shù)字信號(hào),并做FFT,將處理數(shù)據(jù)再穿個(gè)
    發(fā)表于 12-07 09:49

    MSP430 的Bluetooth連接設(shè)計(jì)

    為提供無(wú)線 (OTA) 更新的必然選擇。 這篇博文一篇短小的技術(shù)論文為重點(diǎn);這篇技術(shù)論文主要介紹了MSP430 MCU與其它現(xiàn)成可用的片上系統(tǒng) (SoC) 進(jìn)行對(duì)接,通過(guò)一個(gè)將2個(gè)處理器連接
    發(fā)表于 06-04 10:27

    什么是MSP430處理器?MSP430處理器有哪些技術(shù)要點(diǎn)?

    什么是MSP430處理器?MSP430處理器有哪些技術(shù)要點(diǎn)?
    發(fā)表于 05-27 06:52

    MSP430簡(jiǎn)介

    電路、數(shù)字電路模塊和微處理器集成在一個(gè)芯片上,提供“單片機(jī)”解決方案。·該系列單片機(jī)多應(yīng)用與需要電池供電的便攜式儀器儀表中。二、MSP430優(yōu)勢(shì)處理能力強(qiáng)·尋址方式豐富(7種源操作數(shù)
    發(fā)表于 07-21 06:50

    msp430封裝庫(kù)

    msp430封裝庫(kù),msp430封裝庫(kù)
    發(fā)表于 08-04 13:59 ?2158次下載
    <b class='flag-5'>msp430</b>封裝庫(kù)

    msp430延時(shí)程序設(shè)計(jì)

    msp430延時(shí)程序設(shè)計(jì)msp430延時(shí)程序設(shè)計(jì)msp430延時(shí)程序設(shè)計(jì)
    發(fā)表于 04-29 14:40 ?0次下載

    MSP430中文資料

    MSP430中文資料,里面有MSP430的詳細(xì)介紹,功能特點(diǎn)。
    發(fā)表于 05-16 14:31 ?170次下載

    MSP430教程14:MSP430單片機(jī)ADC12模塊

    MSP430教程14:MSP430單片機(jī)ADC12模塊
    發(fā)表于 10-12 09:03 ?55次下載
    <b class='flag-5'>MSP430</b>教程14:<b class='flag-5'>MSP430</b>單片機(jī)ADC12模塊

    MSP430 MCUs, Passive RF and Low-Power RF Solutions Guide能量收集

    MSP430 MCUs, Passive RF and Low-Power RF Solutions Guide能量收集
    發(fā)表于 10-12 14:58 ?3次下載
    <b class='flag-5'>MSP430</b> MCUs, Passive RF and Low-Power RF Solutions Guide能量<b class='flag-5'>收集</b>

    關(guān)于MSP430單片機(jī)的USB接口固件編程的研究

    基于 MSP430 系列單片機(jī)的系統(tǒng)設(shè)計(jì),已經(jīng)遍布電子產(chǎn)品的每一個(gè)領(lǐng)域。 MSP430 單片機(jī)開(kāi)發(fā)的系統(tǒng)與計(jì)算機(jī)的通信,可以使得信息數(shù)據(jù)更好更快的被
    發(fā)表于 05-02 08:33 ?8次下載
    關(guān)于<b class='flag-5'>MSP430</b>單片機(jī)的USB接口<b class='flag-5'>固件</b>編程的研究

    MSP430處理器Value Line介紹

    在這部分,我們將全面介紹MSP430 Value Line系列的微處理器。為了進(jìn)行練習(xí),我們要下載并安裝與之相關(guān)的軟件及相應(yīng)的組件——MSP430 LaunchPad。
    發(fā)表于 05-04 15:43 ?9次下載
    <b class='flag-5'>MSP430</b>微<b class='flag-5'>處理</b>器Value Line介紹

    介紹了解 MSP430處理

    主要討論德州儀器的MSP430處理器。
    的頭像 發(fā)表于 06-13 01:01 ?5240次閱讀

    基于MSP430的智能窗戶設(shè)計(jì)方案

    本文討論了一種基于MSP430的智能窗戶設(shè)計(jì),利用各種傳感器感知外界環(huán)境的變化并收集數(shù)據(jù),用ZigBee 組網(wǎng)的方式傳送數(shù)據(jù),MSP430 處理
    發(fā)表于 08-22 12:47 ?1621次閱讀
    基于<b class='flag-5'>MSP430</b>的智能窗戶設(shè)計(jì)方案

    MSP430 MCU上的USB現(xiàn)場(chǎng)固件更新

    電子發(fā)燒友網(wǎng)站提供《MSP430 MCU上的USB現(xiàn)場(chǎng)固件更新.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 09:27 ?0次下載
    <b class='flag-5'>MSP430</b> MCU上的USB現(xiàn)場(chǎng)<b class='flag-5'>固件</b>更新
    主站蜘蛛池模板: 国内精品自线在拍2020不卡| 亚洲1卡二卡3卡4卡新区在线| 日韩中文无线码在线视频| 亚洲精品不卡视频| hd性欧美俱乐部中文| 黄色小说在线| 日日干夜夜啪蕉视频| 中文字幕一区二区三区在线观看| 国产精品1区2区| 男男高H啪肉Np文多攻多一受| 亚洲a视频在线| 成人免费小视频| 美女露出乳胸扒开尿口| 亚洲精品国产字幕久久vr| 超碰超碰视频在线观看| 久久国产高清字幕中文| 午夜福利理论片在线播放| xxx日本hd| 两个人看的www免费高清直播 | 国产精品观看视频免费完整版 | 肉肉高潮液体高干文H| 9277在线观看免费高清完整版| 国产最猛性XXXX69交| 手机毛片免费看| www.色片| 嫩草电影网嫩草影院| 优优色影院| 好姑娘社区在线视频| 玩50岁四川熟女大白屁股直播| 八妻子秋霞理在线播放| 美女激清床上戏大全| 在线免费观看视频a| 黄色直接观看| 亚洲精品123区在线观看| 国产精品人妻无码免费A片导航 | 色婷婷99综合久久久精品| 99视频免视看| 免费高清国产| 24小时日本在线观看片| 久久极品视频| 一区二区中文字幕在线观看|