मैं समझदार बिट्स को लॉन्च करने की कोशिश कर रहा हूं, जो कि एक लॉन्चपैड बोर्ड तक पहुंचा है (स्पार्कफुन केबल का उपयोग करके: ऑरेंज P1.6, येलो से P1.5 तक जाता है। यह तब तक सही होना चाहिए, जब तक कि मुझे MOSI और MISO की उलझन न हो। ...)। मेरे पास सीएस नहीं है, क्योंकि मैं बस पाइरेट का उपयोग कर रहा हूं, ताकि कुछ भी देख सकूं।
बस पाइरेट को SPI, 125KHz, क्लॉक पोलरिटी आइडल कम, आउटपुट क्लॉक एज एक्टिव टू आइडल, इनपुट सैंपल फेज मिड / CS के लिए सेट अप किया गया है, आउटपुट सामान्य है।
लॉन्चपैड पर, मेरे पास MSP430G2231 है जिसमें कोई बाहरी क्रिस्टल नहीं है। कोड संगीतकार स्टूडियो का उपयोग करना, मेरे पास निम्नलिखित हैं:
#include "msp430g2231.h"
volatile unsigned char value=0;
#pragma vector=USI_VECTOR
__interrupt void universal_serial_interface(void)
{
value+=1;
USISRL=value;
USICNT=8;
}
void main(void){
WDTCTL = WDTPW + WDTHOLD;
BCSCTL1 = CALBC1_1MHZ; // Set range
DCOCTL = CALDCO_1MHZ;
BCSCTL2 &= ~(DIVS_3);
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE;
USICTL1 |= USIIE;
USICKCTL = USIDIV_3 + USISSEL_2;
USICTL0 &= ~USISWRST;
USISRL=value;
USICNT = 8;
__bis_SR_register(LPM0_bits+ GIE);
}
इसमें से अधिकांश को विभिन्न नमूनों से एक साथ सिल दिया जाता है। डेटा शीट के बहुत पढ़ने के बाद, ऐसा लगता है कि USI घड़ी 125KHz (1MHz के SMCLK, 8 से विभाजित) पर चलने के लिए सेट है, हालांकि मेरे पास इसे मापने की गुंजाइश नहीं है।
दौड़ते समय, मुझे वही मिलता है जो अनिवार्य रूप से बस के समुद्री डाकू से निकलता है। P ने USI इंटरप्ट वेक्टर की पहली लाइन पर एक ब्रेकपॉइंट लगाया, और यह तीन बार चला गया था, इसलिए मुझे बस समुद्री डाकू से 0, 1, 2 मिलनी चाहिए थी
0x00(0x00)0x00(0x00)][0x40(0x00)]
और इसे मुफ्त चलाने के लिए, मुझे बस इस तरह से सामान मिलता है:
[0xFF(0x00)][0x3F(0x00)][0x7F(0x00)][0xBF(0x00)][0xC0(0x00)0x00(0x00)][0x40(0x00)0x80(0x00)]
जो अभी भी कुछ भी नहीं लग रहा है कि मैं क्या उम्मीद कर रहा हूँ।
मैंने ज्यादातर शाम को चिप के लिए यूजर्स गाइड के माध्यम से गुजारा है, और मैं अभी भी स्तब्ध हूं।
यह लिखते समय, मुझे पता चला कि मैं लॉज एनालाइज़र के रूप में बस पाइरेट का उपयोग कर सकता हूं (LogicSniffer का उपयोग करके), और ऐसा करने के लिए इसे सेट कर सकता हूं। और 0x55 को लिखने के लिए कार्यक्रम को संशोधित किया USISRL
, और चीजों को थोड़ा और धीमा USIDIV
करने के USIDIV_4
लिए बदल दिया , और यहां परिणाम हैं:
घड़ी संकेत अच्छा लग रहा है, LogicSniffer की रिपोर्ट है कि यह 285KHz के बारे में है ... और MOSI है ... विशेष। मैं एक अच्छा वैकल्पिक पैटर्न की उम्मीद करूँगा, क्योंकि मैं 0x55 लिख रहा हूँ, और यह कुछ भी है।
किसी के पास कोई भी विचार है जो मैं गलत कर रहा हूं? दोषपूर्ण चिप? कुछ और?
संपादित करें: ठीक है, मेरी ओर से मूर्खता की मामूली राशि। मैंने उस मान को नहीं बदला जो व्यवधान में SPI को लिखा जाता है। अपेक्षित पैटर्न में यह परिणाम करना:
हालाँकि, एक वृद्धिशील बाइट को लिखने का प्रयास करने से मुझे कचरा हो जाता है:
इसलिए, मुझे अभी भी एक समस्या है, जैसा कि मैंने सोचा था कि उतना बड़ा नहीं है ...
EDIT 2: नीचे दी गई टिप्पणियों के लिए धन्यवाद, मैंने अपनी बिजली आपूर्ति (स्पार्कफुन की ब्रेडबोर्ड बिजली की आपूर्ति) को बंद करने के लिए बस पीरेट केबल से जमीन के तार को बांध दिया, जो पहले असंबद्ध था। पहले, उनके द्वारा साझा किया गया सबसे करीबी मैदान USB हब में वापस था मैं इस सभी उपकरणों को बंद कर रहा हूं।
काउंटर प्रोग्राम को चलाते समय MOSI पर यह गड़बड़ दिखती है, और LogicSniffer अब बाइट्स को सही ढंग से डिकोड कर सकता है:
मॉनिटर मोड में बस समुद्री डाकू अभी भी अजीब परिणाम रिपोर्ट करता है:
[0x00(0x00)][0x04(0x00)][0x06(0x00)][0x10(0x00)][0x10(0x00)][0x10(0x00)][0x12(0x00)][0x18(0x00)]
यह लिखने के सिरों का पता लगाने में बेहतर प्रतीत होता है (मैं मान रहा हूं कि वर्ग कोष्ठक का परिसीमन क्या है), लेकिन डेटा अभी भी बंद है। मैं अभी चिंतित नहीं हूं कि तरंग बेहतर दिख रही है, लेकिन यह जानना अभी भी अच्छा होगा कि बस समुद्री डाकू क्यों भ्रमित हो रहे हैं।
while(1);
समाप्त करने और यादृच्छिक सामान करने के लिए मुख्य () के अंत में एक या समकक्ष नहीं देखता ।