亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? nrf24l01.c

?? MSP acquires data and sends through USB to PC. Check the link for PC capture software and project d
?? C
字號(hào):
/*
 * File:        nrf24l01.c
 * Purpose:     nRF24L01 handler functions
 * Author:      Peter Ivanov, Olimex Ltd.
 * Modified by:
 * Created:     2007-10-14 11:29:32
 * Last modify: 2007-10-21 11:50:26 ivanovp {Time-stamp}
 * Copyright:   (C) Peter Ivanov, 2007
 * Licence:     GPL
 */
/**
 * \file nrf24l01.c
 * \brief nRF24L01 handler functions. This is for MOD-NRF24Lx (MOD-NRF24LR or MOD-NRF24LS) extension board. 
 * You should connect P3.0 to CSN, P3.1 to MOSI, P3.2 to MISO, P3.3 to CLK and P1.6 to CE using the EXT connector 
 * of MSP430-449STK2.
 * \author Peter Ivanov, Olimex Ltd.
 */

#include <msp430xG461x.h>
#include "nrf24l01.h"
#include "time.h"
#include "lcd.h"

#define CSN_TIME      2
#define CE_HIGH_TIME  10000

/// Receive the packets with following address
unsigned char RX_ADDRESS_P0[5]  = {5,6,7,8,9};
/// Receive the packets with following address
unsigned char RX_ADDRESS_P1[5]  = {0,1,2,3,4};
/// Transmit packets with following address
unsigned char TX_ADDRESS[5]     = {5,6,7,8,9};
unsigned char ADDRESS[5];

unsigned char status;

/**
 * Software delay.
 *
 * @param a Number of loop.
 */
void Delay (unsigned long a)
{ 
    while (--a != 0); 
}

/**
 * Internally used function to switch /CS line to high.
 */
inline void CSN_HIGH (void)
{
    P8OUT |= BIT3; // P8.3 HIGH
}

/**
 * Internally used function to switch /CS line to low.
 */
void CSN_LOW (void)
{ 
    Delay (CSN_TIME);
    P8OUT &= ~BIT3; // P8.3 LOW
}

/**
 * Internal function to enable chip nRF24L01 (switch chip enable line to high).
 */
void CE_HIGH(void)
{ 
    P8OUT |= BIT4; // P8.4 HIGH
    Delay (CE_HIGH_TIME); 
}

/**
 * Internally used function to disable chip nRF24L01 (switch chip enable line to low).
 */
inline void CE_LOW(void)
{
    P8OUT &= ~BIT4; // P8.4 LOW
}

/**
 * Internally used function to transmit and receive a byte via SPI channel.
 *
 * @param data One byte to send.
 * @return Received byte.
 */
unsigned char SPI_SendByte(unsigned char data)
{
    while ((IFG2 & UCA0TXIFG) == 0);    // wait while not ready / for RX
    UCA0TXBUF = data;                   // write
    while ((IFG2 & UCA0RXIFG) == 0);    // wait for RX buffer (full)
    return (UCA0RXBUF);
}

/**
 * Internally used function to send command to the chip NRF24L01 via SPI.
 *
 * @param cmd Command to send. Example: R_REGISTER
 * @param addr Address to send. Example: RX_ADDR_P0
 * @param data_byte Data byte to send. This data byte will not be sent in some cases! Check source code!
 * @return Status.
 */
unsigned char SPI_Send_command_with_ADDR (unsigned char cmd, unsigned char addr, unsigned char data_byte)
{
    unsigned char temp,command = 0;
    int j, k;
    command = (cmd << 5) | addr;
    CSN_LOW();
    if (cmd == R_REGISTER)
    {
        if (addr == RX_ADDR_P0 || addr == RX_ADDR_P1 || addr == TX_ADDR)
        {

            status = SPI_SendByte(command);
            for (k = 0; k < 5; k++)
            {
                ADDRESS[k] = SPI_SendByte(NRF_NOP);
            }
            CSN_HIGH();
            return status;
        }
        else
        {
            status = SPI_SendByte(command);
            temp = SPI_SendByte(NRF_NOP);
            CSN_HIGH();
            return temp;
        }
    }
    if (cmd == W_REGISTER)
    {
        if (addr == RX_ADDR_P0)
        {
            status = SPI_SendByte(command);
            for (j = 0; j < 5; j++)
            {
                temp = RX_ADDRESS_P0[j];
                SPI_SendByte(temp);
            }
            CSN_HIGH();
            return status;
        }

        if (addr == RX_ADDR_P1)
        {
            status = SPI_SendByte(command);
            for (j = 0; j < 5;j++)
            {
                temp = RX_ADDRESS_P1[j];
                SPI_SendByte(temp);
            }
            CSN_HIGH();
            return status;
        }

        if (addr == TX_ADDR)
        {
            status = SPI_SendByte(command);
            for (j = 0; j < 5;j++)
            {
                temp = TX_ADDRESS[j];
                SPI_SendByte(temp);
            }
            CSN_HIGH();
            return status;
        }
        else
        {
            temp = SPI_SendByte(command);
            SPI_SendByte(data_byte);
            CSN_HIGH();
            return temp;
        }
    }

    return 1;
}

unsigned char SPI_Send_command_without_ADDR (unsigned char cmd, unsigned char data_byte)
{
    unsigned char temp = 0;
    CSN_LOW();
    if (cmd == R_RX_PAYLOAD)
    {
        status = SPI_SendByte(cmd);
        temp = SPI_SendByte(NRF_NOP);
        CSN_HIGH();
        return temp;
    }
    if (cmd == W_TX_PAYLOAD)
    {
        status = SPI_SendByte(cmd);
        SPI_SendByte(data_byte);
        CSN_HIGH();
        return status;
    }
    status = SPI_SendByte(cmd);
    CSN_HIGH();
    return status;

}

// Setting for nRF chip
void NRF_init (void)
{
    ////////////////////////////
    // Initialize SPI interface
    ////////////////////////////
    // master mode, data valid on rising edge, msb first
    UCA0CTL0 = UCCKPH + UCMST + UCMSB + UCSYNC;

    // clock -> SMCLK
    UCA0CTL1 = UCSSEL1;

    // Baud Rate
    UCA0BR0 = 0x02;
    UCA0BR1 = 0x00;
    
    //UCA0MCTL = 0x00;

    P7SEL |= BIT1 | BIT2 | BIT3;    // P7.1-3 SPI option select
    P7DIR |= BIT1 | BIT3;           // P7.1 (MOSI) and P7.3 (CLK) are outputs
    P7DIR &= ~BIT2;                 // P7.2 (MISO) is input
    P8DIR |= BIT3 | BIT4;           // P8.3 (#CS) and P8.4 (CE) are outputs
    P8DIR &= ~BIT5;                 // P8.5 (IRQ) is input

    // Disable CS
    CSN_HIGH();

    ///////////////////////////
    // Configure chip nRF24L01
    ///////////////////////////

    // Discard transmission
    CE_LOW();

    //Write CONFIG register (addres - 0x00)
    //00001010 - CRC enable, power-up, RX
    status = SPI_Send_command_with_ADDR(W_REGISTER, CONFIG_REG_ADDR, 0x0B);
    //Write RX_ADDR_P0 register -> Set receive address data Pipe0 -> address in RX_ADDRESS_P0 array
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_ADDR_P0, NRF_NOP);
    //Write RX_ADDR_P1 register -> Set receive address data Pipe1 -> address in RX_ADDRESS_P1 array
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_ADDR_P1, NRF_NOP);
    //Write TX_ADDR register -> Transmit address. Used for a PTX device only. Address in TX_ADDRESS array
    status = SPI_Send_command_with_ADDR(W_REGISTER, TX_ADDR, NRF_NOP);
    //Write RX_PW_P0 register -> Set number of bytes in RX payload in data pipe0 -> 1 byte
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_PW_P0, 1);
    //Write RX_PW_P1 register -> Set number of bytes in RX payload in data pipe1 -> 1 byte
    status = SPI_Send_command_with_ADDR(W_REGISTER, RX_PW_P1, 1);
    NRF_prepareForReceive ();
}

/**
 * Send one byte to the air via chip nRF24L01.
 * Addresses are hardcoded:
 * @see RX_ADDRESS_P0 RX_ADDRESS_P1 TX_ADDRESS
 *
 * @param byte The data byte to send.
 */
void NRF_send (uint8_t byte)
{
    uint8_t status_temp;

    // Chip enable low
    CE_LOW();

    // Setting for TX device
    // Write CONFIG register -> 00001010 - CRC enable, power-up, TX
    status = SPI_Send_command_with_ADDR (W_REGISTER,CONFIG_REG_ADDR, 0x0A);

    // Send payload - send any data
    status = SPI_Send_command_without_ADDR (W_TX_PAYLOAD, byte);

    // Pulse for CE -> starts the transmission.
    CE_HIGH();
    CE_LOW();

    // Read STATUS register
    status = SPI_Send_command_without_ADDR(NRF_NOP, NRF_NOP);

    // if exceed number of transmision packets
    if ((status & MAX_RT) != 0) 
    {

        // Clear MAX_RT bit in status register
        status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|MAX_RT));

        // No communication event here
        LCD_printf ("MAX_RT\n");

        // Flush TX FIFO (in TX mode)
        status_temp = SPI_Send_command_without_ADDR(FLUSH_TX, NRF_NOP); // XXX test code
    }

    // If packet sent on TX
    if ((status & TX_DS) != 0) 
    {
        // Clear TX_DS bit in status register
        status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|TX_DS));

        // Your code here
        //LCD_printf ("TX_DS\n");
    }

    // If TX full
    if ((status & TX_FULL) != 0)
    {
        // Flush TX FIFO (in TX mode)
        status_temp = SPI_Send_command_without_ADDR(FLUSH_TX, NRF_NOP);

        // Your code here
        // ...
        LCD_printf ("TX_FULL\n");
    }

}

/**
 * After sending a byte you may set the device to RX mode.
 */
void NRF_prepareForReceive ()
{
    // Setting for RX device
    //Write CONFIG register -> 00001010 - CRC enable, power-up, RX
    status = SPI_Send_command_with_ADDR(W_REGISTER,CONFIG_REG_ADDR, 0x0B);
}

/**
 * Receive one byte from the air via chip nRF24L01. 
 * Addresses are hardcoded:
 * @see RX_ADDRESS_P0 RX_ADDRESS_P1 TX_ADDRESS
 *
 * @param byte The data byte to receive.
 * @return TRUE: if byte succesfully received.
 *         FALSE: if no input data.
 */
bool_t NRF_receive (uint8_t *const byte)
{
    uint8_t payload;
    uint8_t status_temp;

    CE_HIGH ();
    if (IRQ ()) // check interrupt line of nRF24L01...
    {
        // Read STATUS status register
        status = SPI_Send_command_without_ADDR(NRF_NOP, NRF_NOP);

        // Set high when new data arrives RX FIFO
        if ((status & RX_DR) != 0)
        {
            // Chip enable low
            CE_LOW();

            //Read payload data
            payload = SPI_Send_command_without_ADDR(R_RX_PAYLOAD, NRF_NOP);

            // Clear RX_DR bit in status register
            status_temp = SPI_Send_command_with_ADDR(W_REGISTER, STATUS_ADDR, (status|RX_DR));

            *byte = payload;

            // Flush RX FIFO
            status_temp = SPI_Send_command_without_ADDR(FLUSH_RX, NRF_NOP); // XXX test code
            return TRUE;
        }
    }
    return FALSE;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av影院在线| 在线观看免费视频综合| 另类欧美日韩国产在线| 亚洲精品亚洲人成人网在线播放| 亚洲成av人片一区二区三区| 一区二区三区在线观看欧美 | 婷婷成人激情在线网| 亚洲愉拍自拍另类高清精品| 亚洲精品国产一区二区精华液 | 欧美aaaaa成人免费观看视频| 午夜成人在线视频| 日本欧美久久久久免费播放网| 亚洲超碰精品一区二区| 热久久久久久久| 久久不见久久见免费视频1| 激情综合色丁香一区二区| 国产一区二区在线观看视频| 国产激情一区二区三区四区| 成人国产精品免费观看动漫| 91在线精品一区二区三区| 一本大道av伊人久久综合| 欧美日韩一区二区欧美激情| 欧美一区欧美二区| 精品蜜桃在线看| 国产精品视频第一区| 亚洲精品欧美专区| 免费亚洲电影在线| 国产成人在线免费| 91网站视频在线观看| 欧美色老头old∨ideo| 精品久久久久久久久久久久包黑料 | 欧美日韩成人综合在线一区二区| 欧美一区二区久久久| 国产亚洲精品aa| 亚洲男人的天堂在线观看| 日日夜夜免费精品| 国产suv精品一区二区6| 欧美综合一区二区| 精品乱人伦小说| 最新国产精品久久精品| 亚洲1区2区3区视频| 国产精品乡下勾搭老头1| 色噜噜狠狠成人中文综合| 日韩免费一区二区三区在线播放| 国产精品美女久久久久久久久| 亚洲激情图片一区| 韩国在线一区二区| 欧美在线影院一区二区| 欧美精品一区二区精品网| 亚洲乱码国产乱码精品精小说| 日韩av一二三| 9l国产精品久久久久麻豆| 欧美一级精品大片| 亚洲丝袜自拍清纯另类| 九九久久精品视频| 色香色香欲天天天影视综合网| 精品欧美一区二区久久| 一区二区激情视频| 国产盗摄视频一区二区三区| 69堂成人精品免费视频| 国产精品丝袜91| 麻豆精品在线看| 欧美色网站导航| 国产精品日日摸夜夜摸av| 蜜臀精品久久久久久蜜臀 | 欧美日韩久久不卡| 一色桃子久久精品亚洲| 黄色小说综合网站| 69久久夜色精品国产69蝌蚪网| 亚洲免费在线电影| 国产成人免费高清| 日韩欧美一区二区久久婷婷| 一区二区高清在线| 色综合天天综合| 欧美韩国一区二区| 久久国产精品区| 91精品国产色综合久久ai换脸 | 成人免费精品视频| 欧美精品一区二区三区蜜桃视频| 亚洲成av人**亚洲成av**| 在线亚洲+欧美+日本专区| 国产精品午夜久久| 国产剧情一区在线| 欧美大片在线观看一区二区| 婷婷开心久久网| 欧美顶级少妇做爰| 亚洲高清久久久| 91美女精品福利| 亚洲欧洲另类国产综合| 成人夜色视频网站在线观看| 久久久国产精品午夜一区ai换脸| 久久国产精品区| 精品播放一区二区| 精品一区二区av| 精品av综合导航| 久久99久久99| 26uuu国产在线精品一区二区| 奇米影视一区二区三区| 欧美一区二区三级| 另类小说视频一区二区| 精品久久人人做人人爱| 激情成人午夜视频| 久久久99免费| 粉嫩av一区二区三区在线播放 | 亚洲欧洲av在线| 97精品超碰一区二区三区| 最新成人av在线| 色88888久久久久久影院按摩 | 99精品久久99久久久久| 亚洲日本成人在线观看| 在线观看日韩精品| 亚洲高清视频在线| 91精品国产综合久久久久久久| 日日噜噜夜夜狠狠视频欧美人| 69av一区二区三区| 精品一区二区在线看| 久久九九久精品国产免费直播| 成人免费观看视频| 亚洲永久精品大片| 欧美一卡二卡三卡四卡| 韩国午夜理伦三级不卡影院| 国产色婷婷亚洲99精品小说| 不卡电影一区二区三区| 亚洲一区在线观看视频| 欧美一区二区免费观在线| 国产精品1024| 亚洲人成网站精品片在线观看| 欧洲视频一区二区| 蜜臀久久99精品久久久久宅男| 国产亚洲欧洲一区高清在线观看| 91网上在线视频| 日本午夜一区二区| 国产精品系列在线| 欧美亚洲动漫另类| 久草在线在线精品观看| 中文字幕成人av| 欧美人与禽zozo性伦| 亚洲精品国产a久久久久久| 欧美日韩精品是欧美日韩精品| 男人的天堂亚洲一区| 久久精品人人做人人综合| 色欧美日韩亚洲| 韩国女主播一区二区三区| 亚洲日本免费电影| 日韩三级视频中文字幕| 成人91在线观看| 蜜臀久久久久久久| 成人欧美一区二区三区小说 | 国产精品久久久久久久久搜平片| 在线观看一区不卡| 国产乱人伦精品一区二区在线观看| 亚洲精品第一国产综合野| 精品剧情在线观看| 色综合一区二区| 国内精品在线播放| 亚洲香肠在线观看| 欧美经典一区二区| 欧美老女人第四色| 波多野结衣精品在线| 美女网站色91| 亚洲影视在线观看| 国产欧美日韩卡一| 欧美va亚洲va在线观看蝴蝶网| 色女孩综合影院| 国产大陆亚洲精品国产| 奇米一区二区三区av| 亚洲人精品一区| 国产日韩欧美麻豆| 欧美成人精品福利| 日韩一区二区电影网| 色综合中文字幕| 极品美女销魂一区二区三区 | 亚洲天天做日日做天天谢日日欢 | 一区二区三区高清| 久久九九久久九九| 日韩欧美国产三级电影视频| 在线免费观看日本一区| 成人久久视频在线观看| 经典三级视频一区| 日韩一区精品视频| 亚洲精品欧美二区三区中文字幕| 中文字幕 久热精品 视频在线| 精品久久久久久无| 日韩美一区二区三区| 欧美日本在线看| 久久久亚洲精品石原莉奈| 日韩一区二区三区免费看| 欧美亚洲国产怡红院影院| 色94色欧美sute亚洲线路一ni| 成人看片黄a免费看在线| 国产精品1区2区| 韩国v欧美v亚洲v日本v| 久久99精品国产麻豆婷婷| 日本不卡的三区四区五区| 中文字幕一区二区三区不卡 | 日韩欧美久久久| 欧美日韩精品欧美日韩精品一| 一本久久a久久精品亚洲| av在线一区二区| 9人人澡人人爽人人精品|