<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://e2e.ti.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>MSP430 Ultra-Low Power 16-bit Microcontroller Forum - Recent Threads</title><link>http://e2e.ti.com/support/microcontrollers/msp430/f/166.aspx</link><description>Welcome to the MSP430™16-bit Ultra-Low Power MCUs Section of the TI E2E Support Community. Ask questions, share knowledge, explore ideas, and help solve problems with fellow engineers.</description><dc:language>en-US</dc:language><generator>6.x Production</generator><item><title>SPI Slave Sanity Check</title><link>http://e2e.ti.com/thread/265789.aspx</link><pubDate>Sat, 18 May 2013 04:13:59 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:e8afa0d8-a7a0-48b8-9e91-2057f74795e9</guid><dc:creator>Troy Johnson</dc:creator><slash:comments>2</slash:comments><comments>http://e2e.ti.com/thread/265789.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265789/rss.aspx</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m trying to get an SPI slave working on UCB0.&amp;nbsp; I am using a MSP430F5529.&amp;nbsp; I want to use 3-wire interface.&lt;/p&gt;
&lt;p&gt;The pins associated with UCB0 are as follows:&lt;/p&gt;
&lt;div&gt;P2.7 - Slave TX Enabled (Not used in 3-wire interface.&amp;nbsp; &lt;span style="background-color:#ffff00;"&gt;Is this correct?&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;P3.0 - Slave Out&lt;/div&gt;
&lt;div&gt;P3.1 - Slave In&lt;/div&gt;
&lt;div&gt;P3.1 - Slave Clk In&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;The code I&amp;#39;m using to configure for UCB0 is as follows&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family:courier new,courier;"&gt; // Port initialization for DAC&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PBSEL_L |= (BIT2 + BIT1 + BIT);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PBDIR_L &amp;amp;= ~BIT2;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Clk is input&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;PBDIR_L |= BIT0;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Data is output&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize USCI_B0 for SPI Slave operation&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Put state machine in reset&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCB0CTL0 = UCMSB + UCMODE_0 + UCSYNC; // 3-pin, 8-bit SPI slave MSB first&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCB0CTL1 &amp;amp;= ~UCSWRST;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Release USCI state machine&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCB0IFG &amp;amp;= ~UCTXIFG;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//enable interrupt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0IE |=&amp;nbsp; UCTXIE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Enable interrupt **After** CTL1 is taken out of reset!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Start transmitter going&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCB0TXBUF = 0xFF&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;Then I have this code in USCI_B0_VECTOR&lt;/p&gt;
&lt;div style="margin-left:30px;"&gt;&lt;span style="font-family:courier new,courier;"&gt;#pragma vector=USCI_B0_VECTOR&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;__interrupt void USCI_B0_ISR(void)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp; switch(__even_in_range(UCB0IV,4))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 0: break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Vector 0 - no interrupt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 2: break;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Vector 2 - RXIFG&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 4: &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Vector 4 - TXIFG&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//put one byte into UCB0TXBUF&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0TXBUF = cnt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cnt++;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default: break;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new,courier;"&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;I&amp;#39;ve verified that I have a 1MHz clock on P3.2 the input clock.&amp;nbsp; However, I never see an interrupt.&amp;nbsp; What am I doing wrong?&amp;nbsp; I&amp;#39;m sure it is something silly, but for the life of me I can&amp;#39;t figure out what it is.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>MSP430FR5739 Capture using timer.</title><link>http://e2e.ti.com/thread/265880.aspx</link><pubDate>Mon, 20 May 2013 00:58:38 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:788fed90-e291-49a2-98eb-f4dcef91b5b4</guid><dc:creator>Jig Desai</dc:creator><slash:comments>0</slash:comments><comments>http://e2e.ti.com/thread/265880.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265880/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Using P2.5 as CCI0A input for TB0 CCR0 capture. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;To select P2.5 , TB0.0 function:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;P2DIR &amp;amp;= ~(BIT5); // Dir Input&lt;br /&gt; P2SEL1 &amp;amp;= ~(BIT5);&lt;br /&gt; P2SEL0 |= BIT5;&lt;/p&gt;
&lt;p&gt;TB0 setup:&lt;/p&gt;
&lt;p&gt;TB0CCTL0 = CCIE;&lt;/p&gt;
&lt;p&gt;TB0CCTL0 = CAP + SCS + CCIS_0 + CM_1;&lt;/p&gt;
&lt;p&gt;TB0CTL = TBSSEL_1 + MC_2 + ID_3;&lt;/p&gt;
&lt;p&gt;ISR:&lt;/p&gt;
&lt;p&gt;#pragma vector = TIMER0_B0_VECTOR&lt;br /&gt;__interrupt void Timer0_B0_ISR(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;start = TB0CCR0;&lt;br /&gt;&amp;nbsp; &amp;nbsp;P3OUT |= BIT7; &amp;nbsp;// LED on.&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;---------------------------------------------------------&lt;/p&gt;
&lt;p&gt;When I send a pulse to P2.5, I don&amp;#39;t see the ISR getting fired.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Any pointers would be helpful.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;thanks,&lt;/p&gt;
&lt;p&gt;jig&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>PS2 Keyboard problem</title><link>http://e2e.ti.com/thread/265873.aspx</link><pubDate>Sun, 19 May 2013 21:36:36 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:844b4104-b6a3-4891-bbe5-d53374a7cb01</guid><dc:creator>kuldeep dhaka</dc:creator><slash:comments>1</slash:comments><comments>http://e2e.ti.com/thread/265873.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265873/rss.aspx</wfw:commentRss><description>&lt;p&gt;i have successfully(somewhat) interfaced ps2 keyboard&amp;nbsp; with msp430.&lt;/p&gt;
&lt;p&gt;everything goes perfect mostly before ~25 keystrokes.&lt;/p&gt;
&lt;p&gt;but mostly after ~25 keystrokes , error in communication occurs(parity error).&lt;/p&gt;
&lt;p&gt;all data after error-data is also having parity problem. (ie anything after error data is garbage.)&lt;/p&gt;
&lt;p&gt;im using POT for converting 5V -&amp;gt; 3V , GND common, powering keyboard from external source(i have tried changing keyboard also).&lt;/p&gt;
&lt;p&gt;i have a MSP430G2553IN20 launchpad board.&lt;/p&gt;
&lt;p&gt;the data is printed on screen, that i can see.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;// port2&lt;/p&gt;
&lt;p&gt;#include &amp;lt;hardware/port2.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void port2_init()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_PDIR &amp;amp;= ~(KEYBOARD_PS2_DATA | KEYBOARD_PS2_CLK);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_PREN |= KEYBOARD_PS2_DATA | KEYBOARD_PS2_CLK;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_POUT |= KEYBOARD_PS2_DATA | KEYBOARD_PS2_CLK;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_PIES |= KEYBOARD_PS2_CLK;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_PIE |= KEYBOARD_PS2_CLK;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_PIFG &amp;amp;= ~KEYBOARD_PS2_CLK;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1DIR |= BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1OUT &amp;amp;= ~BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* interrupt goes to pin2_interrupt() */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void port2_interrupt()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1OUT ^= BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;KEYBOARD_PS2_PIFG &amp;amp;= ~KEYBOARD_PS2_CLK;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.index++;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;switch(keyboard_ps2.index)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case -1:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.data = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.parity = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* start bit */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 1:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 2:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 3:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 4:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 5:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 6:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 7:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* data */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(KEYBOARD_PS2_PIN &amp;amp; KEYBOARD_PS2_DATA)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.data |= (1 &amp;lt;&amp;lt; keyboard_ps2.index);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.parity ^= 0x01;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 8:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if((!(KEYBOARD_PS2_PIN &amp;amp; KEYBOARD_PS2_DATA)) == (!keyboard_ps2.parity))&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* incorrect data */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1DIR |= BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* hang */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1OUT ^= BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;__delay_cycles(600000);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* TODO: check parity for data */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 9:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* STOP bit */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2_data_decode();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;default:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.index = -2;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;//ps2.c&lt;/p&gt;
&lt;p&gt;#include &amp;lt;keyboard/ps2.h&amp;gt;&lt;br /&gt;&lt;br /&gt;struct __keyboard_ps2 keyboard_ps2 = &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;.index = -2,&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void keyboard_ps2_data_decode()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;switch(keyboard_ps2.data)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0xF0:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* some key released */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.make = FALSE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0xE0:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* behaviour modifier */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.modifier = TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x12: /* left SHIFT */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x59: /* right SHIFT */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.latch_shift = keyboard_ps2.make;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* right CTRL : &amp;lt;modifier&amp;gt; 0x14 */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x14: /* left CTRL */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.latch_ctrl = keyboard_ps2.make;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* right ALT : &amp;lt;modifier&amp;gt; 0x11 */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x11: /* left ALT */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.latch_alt = keyboard_ps2.make;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* including modifier version */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x1F: /* left GUI */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//keyboard_ps2.latch_gui = keyboard_ps2.make;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* caps */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x58:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(keyboard_ps2.make)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* flip caps */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.latch_caps ^= 0x01;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;default:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(keyboard_ps2.make)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2_resolve_scancode();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.make = TRUE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;keyboard_ps2.modifier = FALSE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void keyboard_ps2_resolve_scancode()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;register uint8_t ch = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(keyboard_ps2.modifier)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;switch (keyboard_ps2.data)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x4A:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = &amp;#39;/&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x5A:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_ENTER;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x69:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_END;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x6B:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_LEFTARROW;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x6C:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_HOME;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x70:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_INSERT;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x71:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_DELETE;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x72:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_DOWNARROW;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x74:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_RIGHTARROW;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x75:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_UPARROW;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x7A:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_PAGEDOWN;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;case 0x7D:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = KEYBOARD_PS2_PAGEUP;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if(keyboard_ps2.data &amp;lt; KEYBOARD_PS2_KEYMAP_SIZE)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch = keyboard_ps2_scancode_en[keyboard_ps2.data][keyboard_ps2.latch_shift];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* caps lock feature, turn character to opposite case */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(keyboard_ps2.latch_caps)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(&amp;#39;a&amp;#39; &amp;lt;= ch &amp;amp;&amp;amp; ch &amp;lt;= &amp;#39;z&amp;#39; )&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch -= &amp;#39;a&amp;#39; - &amp;#39;A&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else if(&amp;#39;A&amp;#39; &amp;lt;= ch &amp;amp;&amp;amp; ch &amp;lt;= &amp;#39;Z&amp;#39;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;ch += &amp;#39;a&amp;#39; - &amp;#39;A&amp;#39;;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(ch)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//uart_send(ch);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;cqueue_push(&amp;amp;uart_cqueue_rx, ch);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;//ps2.h&lt;/p&gt;
&lt;p&gt;#ifndef _KEYBOARD_PS2_H_&lt;br /&gt;#define _KEYBOARD_PS2_H_&lt;br /&gt;&lt;br /&gt;#include &amp;lt;common.h&amp;gt;&lt;br /&gt;#include &amp;lt;uart.h&amp;gt;&lt;br /&gt;#include &amp;lt;cqueue.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define KEYBOARD_PS2_PDIR P2DIR&lt;br /&gt;#define KEYBOARD_PS2_PIN&amp;nbsp; P2IN&lt;br /&gt;#define KEYBOARD_PS2_POUT&amp;nbsp; P2OUT&lt;br /&gt;#define KEYBOARD_PS2_PIFG P2IFG&lt;br /&gt;#define KEYBOARD_PS2_PIES P2IES&lt;br /&gt;#define KEYBOARD_PS2_PIE&amp;nbsp; P2IE&lt;br /&gt;#define KEYBOARD_PS2_PREN P2REN&lt;br /&gt;&lt;br /&gt;#define KEYBOARD_PS2_DATA BIT3&lt;br /&gt;#define KEYBOARD_PS2_CLK BIT4&lt;br /&gt;&lt;br /&gt;/* port/derivative: http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html */&lt;br /&gt;&lt;br /&gt;/* scancodes */&lt;br /&gt;#define KEYBOARD_PS2_TAB&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;9&lt;br /&gt;#define KEYBOARD_PS2_ENTER&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;13&lt;br /&gt;#define KEYBOARD_PS2_BACKSPACE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;127&lt;br /&gt;#define KEYBOARD_PS2_ESCAPE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;27&lt;br /&gt;#define KEYBOARD_PS2_INSERT&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_DELETE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;127&lt;br /&gt;#define KEYBOARD_PS2_HOME&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_END&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_PAGEUP&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;25&lt;br /&gt;#define KEYBOARD_PS2_PAGEDOWN&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;26&lt;br /&gt;#define KEYBOARD_PS2_UPARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;11&lt;br /&gt;#define KEYBOARD_PS2_LEFTARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;8&lt;br /&gt;#define KEYBOARD_PS2_DOWNARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;10&lt;br /&gt;#define KEYBOARD_PS2_RIGHTARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;21&lt;br /&gt;#define KEYBOARD_PS2_F1&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F2&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F3&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F4&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F5&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F6&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F7&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F8&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F9&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F10&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F11&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F12&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_SCROLL&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&lt;br /&gt;#define KEYBOARD_PS2_KEYMAP_SIZE 136&lt;br /&gt;&lt;br /&gt;#define keyboard_ps2_scancode_char(ch1, ch2) {ch1, ch2}&lt;br /&gt;&lt;br /&gt;struct __keyboard_ps2&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t data;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int8_t index;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t parity:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t modifier:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t make:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_shift:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_ctrl:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_alt:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_num:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//uint8_t latch_gui:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_caps:1;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;extern struct __keyboard_ps2 keyboard_ps2;&lt;br /&gt;extern const uint8_t keyboard_ps2_scancode_en[KEYBOARD_PS2_KEYMAP_SIZE][2];&lt;br /&gt;&lt;br /&gt;void keyboard_ps2_init();&lt;br /&gt;void keyboard_ps2_data_decode(void);&lt;br /&gt;void keyboard_ps2_resolve_scancode(void);&lt;br /&gt;&lt;br /&gt;#endif&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;//port2.h&lt;/p&gt;
&lt;p&gt;#ifndef _KEYBOARD_PS2_H_&lt;br /&gt;#define _KEYBOARD_PS2_H_&lt;br /&gt;&lt;br /&gt;#include &amp;lt;common.h&amp;gt;&lt;br /&gt;#include &amp;lt;uart.h&amp;gt;&lt;br /&gt;#include &amp;lt;cqueue.h&amp;gt;&lt;br /&gt;&lt;br /&gt;#define KEYBOARD_PS2_PDIR P2DIR&lt;br /&gt;#define KEYBOARD_PS2_PIN&amp;nbsp; P2IN&lt;br /&gt;#define KEYBOARD_PS2_POUT&amp;nbsp; P2OUT&lt;br /&gt;#define KEYBOARD_PS2_PIFG P2IFG&lt;br /&gt;#define KEYBOARD_PS2_PIES P2IES&lt;br /&gt;#define KEYBOARD_PS2_PIE&amp;nbsp; P2IE&lt;br /&gt;#define KEYBOARD_PS2_PREN P2REN&lt;br /&gt;&lt;br /&gt;#define KEYBOARD_PS2_DATA BIT3&lt;br /&gt;#define KEYBOARD_PS2_CLK BIT4&lt;br /&gt;&lt;br /&gt;/* port/derivative: http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html */&lt;br /&gt;&lt;br /&gt;/* scancodes */&lt;br /&gt;#define KEYBOARD_PS2_TAB&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;9&lt;br /&gt;#define KEYBOARD_PS2_ENTER&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;13&lt;br /&gt;#define KEYBOARD_PS2_BACKSPACE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;127&lt;br /&gt;#define KEYBOARD_PS2_ESCAPE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;27&lt;br /&gt;#define KEYBOARD_PS2_INSERT&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_DELETE&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;127&lt;br /&gt;#define KEYBOARD_PS2_HOME&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_END&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_PAGEUP&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;25&lt;br /&gt;#define KEYBOARD_PS2_PAGEDOWN&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;26&lt;br /&gt;#define KEYBOARD_PS2_UPARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;11&lt;br /&gt;#define KEYBOARD_PS2_LEFTARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;8&lt;br /&gt;#define KEYBOARD_PS2_DOWNARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;10&lt;br /&gt;#define KEYBOARD_PS2_RIGHTARROW&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;21&lt;br /&gt;#define KEYBOARD_PS2_F1&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F2&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F3&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F4&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F5&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F6&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F7&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F8&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F9&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F10&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F11&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_F12&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;#define KEYBOARD_PS2_SCROLL&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;0&lt;br /&gt;&lt;br /&gt;#define KEYBOARD_PS2_KEYMAP_SIZE 136&lt;br /&gt;&lt;br /&gt;#define keyboard_ps2_scancode_char(ch1, ch2) {ch1, ch2}&lt;br /&gt;&lt;br /&gt;struct __keyboard_ps2&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t data;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int8_t index;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t parity:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t modifier:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t make:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_shift:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_ctrl:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_alt:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_num:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//uint8_t latch_gui:1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uint8_t latch_caps:1;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;extern struct __keyboard_ps2 keyboard_ps2;&lt;br /&gt;extern const uint8_t keyboard_ps2_scancode_en[KEYBOARD_PS2_KEYMAP_SIZE][2];&lt;br /&gt;&lt;br /&gt;void keyboard_ps2_init();&lt;br /&gt;void keyboard_ps2_data_decode(void);&lt;br /&gt;void keyboard_ps2_resolve_scancode(void);&lt;br /&gt;&lt;br /&gt;#endif&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>eZ430-Chronos-868 - eZ430-Chronos Wireless Watch Development Tool</title><link>http://e2e.ti.com/thread/72838.aspx</link><pubDate>Tue, 09 Nov 2010 17:45:15 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:2368aaad-2a04-46c2-bed8-dcd9b8c54626</guid><dc:creator>nirmit desai</dc:creator><slash:comments>6</slash:comments><comments>http://e2e.ti.com/thread/72838.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/72838/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hello . &lt;/p&gt;
&lt;p&gt;&amp;nbsp;I am from India .I would like to know how i should&amp;nbsp; order eZ430 chronos 868 watch ? What is its cost because the TI-authorized Indian distributor&amp;#39;s site shows it as 100$ while the TI-estore site shows it as 49$ inclusive of shipping charges. Please correct me if i am wrong.And what&amp;#39;s the difference between wishlist and my cart ?&lt;/p&gt;
&lt;p&gt;What will be included in the kit i receive ?&lt;/p&gt;
&lt;p&gt;Hoping for your reply.&lt;/p&gt;
&lt;p&gt;Nirmit Desai&lt;/p&gt;
&lt;p&gt;nirmitdesai@hotmail.com&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>CC430 Reset Problem</title><link>http://e2e.ti.com/thread/263534.aspx</link><pubDate>Wed, 08 May 2013 04:30:57 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:a296c990-93b6-48f8-849c-5861db791ae8</guid><dc:creator>goodarz kashian</dc:creator><slash:comments>9</slash:comments><comments>http://e2e.ti.com/thread/263534.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/263534/rss.aspx</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hi all,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I&amp;#39;m busy with a development on a &lt;strong&gt;CC430F6137&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;My hardware configuration is as below:&lt;/p&gt;
&lt;p&gt;1) Digital VCC = AVCC = RF VCC = 2.88 volt (regulator with Imax 200mA)&lt;/p&gt;
&lt;p&gt;2) DCO enabled in software with 12MHz Clock &amp;nbsp;(ACLK = 32KHz &amp;nbsp;&amp;amp; MCLK = SMCLK=12MHz)&lt;/p&gt;
&lt;p&gt;3) Vcore is set to Level 3&lt;/p&gt;
&lt;p&gt;4) RF enabled with WOR (868 MHz - fixed 10dBm output power)&lt;/p&gt;
&lt;p&gt;5) watchdog timer enabled (ACLK , 1Sec)&lt;/p&gt;
&lt;p&gt;the problem is when after sending a RF packet and before entering the WOR mode , the MCU resets with several reasons:&lt;/p&gt;
&lt;p&gt;(i checked the &lt;strong&gt;SYSRSTIV&lt;/strong&gt;&amp;nbsp;&amp;nbsp;and displayed it on LCD each time the program start from main(); &amp;nbsp;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Condition 1:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;when the watchdog timer is enabled, the mcu resets more frequently&lt;/p&gt;
&lt;p&gt;and SYSRSTIV = 02h =&amp;nbsp;Brownout (BOR)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Condition 2:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;when the watchdog timer is disabled, the MCU resets occasionally (less than condition 1)&lt;/p&gt;
&lt;p&gt;and SYSRSTIV =&amp;nbsp;0Eh = SVSH (POR)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;i check my VCC on board with a oscilloscope and the vcc has only 140mV p-p&amp;nbsp;ripple&amp;nbsp;&lt;/p&gt;
&lt;p&gt;i&amp;#39;m almost sure that reset occurs after sending the RF Packet&lt;/p&gt;
&lt;p&gt;because i can receive the packet on a second receiver.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I didn&amp;#39;t find a similar known issue in the CC430 errata document.&lt;/p&gt;
&lt;p&gt;Any solution ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Linking Problem [CCS 5.3]: error #10234-D: unresolved symbols remain error #10010: errors encountered during linking; "WatchFirmware.out" not built</title><link>http://e2e.ti.com/thread/265874.aspx</link><pubDate>Sun, 19 May 2013 22:03:05 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:76f1b19a-8e8a-4ebd-873d-d721698ab09c</guid><dc:creator>Druta Cristian</dc:creator><slash:comments>0</slash:comments><comments>http://e2e.ti.com/thread/265874.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265874/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I have a project that contains C++ files and C files. When I downloaded it, I suceeded to compile and to obtain the executable.&lt;/p&gt;
&lt;p&gt;After I created a function, the dependency and the use of function it doesn&amp;#39;t create the executable any more:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;undefined first referenced&amp;nbsp;&lt;/p&gt;
&lt;p&gt;symbol in file &lt;br /&gt; --------- ---------------- &lt;br /&gt; return_buffer_and_size(unsigned char *, unsigned int *) ./Application/MainMenu.obj&lt;/p&gt;
&lt;p&gt;error #10234-D: unresolved symbols remain&lt;br /&gt;error #10010: errors encountered during linking; &amp;quot;WatchFirmware.out&amp;quot; not built&lt;br /&gt;gmake: *** [WatchFirmware.out] Error 1&lt;br /&gt;gmake: Target `all&amp;#39; not remade because of errors.&lt;br /&gt;&amp;gt;&amp;gt; Compilation failure&lt;/p&gt;
&lt;p&gt;**** Build Finished ****&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I use CCS 5.3.&lt;/p&gt;
&lt;p&gt;My project is:&amp;nbsp;https://www.dropbox.com/s/iavxfctpug1oj4o/WatchFirmware.zip?m&lt;/p&gt;
&lt;p&gt;I added the include paths correctly, and I added the include statement, but only the linking part doesn&amp;#39;t work.&lt;/p&gt;
&lt;p&gt;I have seen a picture with Link Order and I worder if this is my problem, but haven&amp;#39;t managed to find it yet.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://processors.wiki.ti.com/index.php/Include_paths_and_options"&gt;http://processors.wiki.ti.com/index.php/Include_paths_and_options&lt;/a&gt;&amp;nbsp;--- linking order&lt;/p&gt;
&lt;p&gt;&amp;quot;./Application/MainMenu.obj&amp;quot; &amp;quot;./Application/BatteryMenu.obj&amp;quot;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;.....&lt;/p&gt;
&lt;p&gt;&amp;quot;./Bluetooth/halwrap.obj&amp;quot; &amp;nbsp;-- used obj by&amp;nbsp;&amp;quot;./Application/MainMenu.obj&amp;quot;&lt;br /&gt;&amp;lt;Linking&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks in advance for your answers.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="position:absolute;font-size:1em;top:326px;left:210px;"&gt;
&lt;div&gt;
&lt;div class="translation" style="color:inherit;background-image:none;border:none;background-position:initial initial;background-repeat:initial initial;"&gt;iavxfctpug1oj4o&lt;/div&gt;
&lt;div class="additional" style="color:inherit;background-image:none;border:none;background-position:initial initial;background-repeat:initial initial;"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Using FPP with hardware multipliers in MSP430</title><link>http://e2e.ti.com/thread/265872.aspx</link><pubDate>Sun, 19 May 2013 20:56:54 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:34e6960d-1b9a-4202-8593-4d240c9124df</guid><dc:creator>Harvey Ku1</dc:creator><slash:comments>0</slash:comments><comments>http://e2e.ti.com/thread/265872.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265872/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I have a significant amount of floating point operations used for our MSP430 application and need to optimize them for speed. &amp;nbsp;From the forums, it seems that the best solution is to use the FPP(Floating Point Package) with the built in hardware multipliers (horner&amp;#39;s method was not suitable). &amp;nbsp;I downloaded the FPP, but could not find the manual that was referred to in the readme.txt file. &amp;nbsp;I am using code composer 4, does anyone have an example of how to integrate the assembly files in the FPP into my C source?&lt;/p&gt;
&lt;p&gt;Thank You,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>MSP-EXP430F5529 for MSP430F2272</title><link>http://e2e.ti.com/thread/265533.aspx</link><pubDate>Fri, 17 May 2013 00:25:15 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:dd46aa85-8059-44a3-bdb1-fe77d15e03d1</guid><dc:creator>Jehangir Parvereshi</dc:creator><slash:comments>6</slash:comments><comments>http://e2e.ti.com/thread/265533.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265533/rss.aspx</wfw:commentRss><description>&lt;p&gt;Can the MSP-EXP430F5529 board used to&amp;nbsp;evaluate the MSP430F2272?&lt;/p&gt;
&lt;p&gt;If not, is there a adapter boar or some other dev board that will serve the purpose?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>TS430L092 and THOLD?</title><link>http://e2e.ti.com/thread/265869.aspx</link><pubDate>Sun, 19 May 2013 18:17:59 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:b95987c8-81a4-4e8c-82b4-16e8b7bcb008</guid><dc:creator>Bruce McKenney47378</dc:creator><slash:comments>0</slash:comments><comments>http://e2e.ti.com/thread/265869.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265869/rss.aspx</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m interested in the THOLD signal on the TS430L092. It drives the /HOLD pin on the EEPROM, and originates in the FET430 TEST/Vpp wire.&lt;/p&gt;
&lt;p&gt;Does anyone know whether/how CCS uses this signal in practice? I think I understand what /HOLD does, but it&amp;#39;s not obvious to me why a JTAG programmer (of the EEPROM) would need to use it. (Truth be known, I&amp;#39;ve never come across a real gotta-have-it application for /HOLD, but that&amp;#39;s just me.)&lt;/p&gt;
&lt;p&gt;My interest is in replacing the EEPROM with a different chip, which uses that pin for something else (non-benign).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>CC430 SPI Transmission only works with long wait time inserted after configuration</title><link>http://e2e.ti.com/thread/265865.aspx</link><pubDate>Sun, 19 May 2013 17:43:31 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:0263afdb-5466-40f9-b869-a8b3a8485b2a</guid><dc:creator>Eric Engineer</dc:creator><slash:comments>0</slash:comments><comments>http://e2e.ti.com/thread/265865.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265865/rss.aspx</wfw:commentRss><description>&lt;p&gt;I&amp;#39;m not sure what I&amp;#39;m missing here, it seems like a hardware thing, as if I&amp;#39;m not waiting for a ready bit to be set or there&amp;#39;s a clock domain difference and I really do need to wait. &amp;nbsp; Anyway I&amp;#39;m using a CC430F6137IRGCT, and after I configure my SPI settings I try to write some bytes.&amp;nbsp;&amp;nbsp; This works fine if I either set a breakpoint before transmisison starts, or if I put a long timer after the configuration.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s my init:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1DIR |= (BIT7); //set bit 7 as an output this is spi chip select&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1OUT |= (BIT7); //set bit 7 high to start out&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//2,3,4 set these bits to use the hardware behind them&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1SEL |= BIT2 + BIT3 + BIT4;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // **Put state machine in reset**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL0 |= UCSYNC+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Synchronous mode enabled&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCCKPL+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clock Polarity High&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCMODE_0+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 3-Pin SPI&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCMSB+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // MSB first select.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCMST;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // SPI master.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSSEL_2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // SMCLK&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 &amp;amp;= ~UCSWRST;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; __delay_cycles(5000000);&amp;nbsp;&amp;nbsp; //only works with this set verified with LA&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ok then I try this to do the write:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (!(UCB0IFG&amp;amp;UCTXIFG));&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;spi_cs_low(); //this function just sets gpio pin to low&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0TXBUF = (unsigned char) (((address) &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8);//MSB Address&lt;/p&gt;
&lt;p&gt;LIke I said with the delay in there it works fine, without nothing comes out.&amp;nbsp; I checked stat registers nothing.&amp;nbsp; I&amp;#39;m not sure what I&amp;#39;m missing, I read the user guide, I read the errata, nothing jumped out at me other than my thought that the processor is running faster than the SPI state machine logic.&amp;nbsp;&amp;nbsp; Is this just expected behavior or have I missed something simple?&lt;/p&gt;
&lt;p&gt;Thank you&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Another "security fuse blown" problem</title><link>http://e2e.ti.com/thread/265600.aspx</link><pubDate>Fri, 17 May 2013 08:37:32 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:829665a8-9a53-4a0c-9399-9ecee2b3c049</guid><dc:creator>Greg Alexander</dc:creator><slash:comments>7</slash:comments><comments>http://e2e.ti.com/thread/265600.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265600/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi All,&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve been working on a low-power data logger with an MSP430 FR5969 for the past few months, and I have code that seems to work relatively well. However, whenever I change the size of an unsigned character array from 512 to something much larger, say 10 thousand, the code hangs somewhere. Worse, the programmer reports that a security fuse has been blown, and I cannot reprogram the device.&lt;/p&gt;
&lt;p&gt;My &amp;quot;fix&amp;quot; to this problem has been to turn the thing off for a few hours, then plug it back in and hit &amp;quot;retry&amp;quot; when Code Composer reports the blown security fuse until the controller programs again. Surprisingly, this method (discovered in an act of frustration) has worked a few times, but it is obviously not something that I want to do again.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The programmer I am using is the MSP-FET430UIF, and I&amp;#39;m doing it over SBW. &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;My questions to the forum are:&lt;/p&gt;
&lt;p&gt;1) Any idea why declaring a large array causes this? Even with the 10k-length unsigned character array, I&amp;#39;m using WAY less than 15k of the controller&amp;#39;s 64k.&lt;/p&gt;
&lt;p&gt;2) Are there any better ways to get the &amp;quot;blown security fuse&amp;quot; error to go away? I&amp;#39;ve been looking through the forums, and it sounds like this is a pretty common error, but it sounds like it happens to everyone for different reasons, and I have not yet found a good solution.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Any feedback is greatly appreciated. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Clean MSP430g2553 library for I2C Communication with ITG3200 gyroscope</title><link>http://e2e.ti.com/thread/265825.aspx</link><pubDate>Sat, 18 May 2013 19:14:49 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:9f74f9b8-eb34-4b23-8456-73ab43146ef3</guid><dc:creator>Bar&amp;#305;&amp;#351;can Kayao&amp;#287;lu</dc:creator><slash:comments>3</slash:comments><comments>http://e2e.ti.com/thread/265825.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265825/rss.aspx</wfw:commentRss><description>&lt;p&gt;I&amp;#39;ve been creating an I2C library for communicating with ITG3200 gyroscope for MSP430g2553 experimental launchpad. I still have slight problems with sequential reading and the signed values but I&amp;#39;m nearly complete. Can you help out the last problems that I&amp;#39;m dealing with? It seems that I&amp;#39;m stuck on a point. Here is the library&amp;nbsp;&lt;a href="http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265825.aspx"&gt;(Please visit the site to view this file)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;edit&amp;gt;&lt;/p&gt;
&lt;p&gt;family user guide :&amp;nbsp;&lt;a href="http://www.ti.com/lit/ug/slau144i/slau144i.pdf"&gt;http://www.ti.com/lit/ug/slau144i/slau144i.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;gyro user guide :&amp;nbsp;&lt;a href="https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf"&gt;https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you do not want to download those 3 source files, here is the explanation of the required functions:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Main:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;WDTCTL = WDTPW + WDTHOLD; // Stop WDT&lt;br /&gt;BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1Mhz&lt;br /&gt;DCOCTL = CALDCO_1MHZ;&lt;br /&gt;P1SEL |= BIT1 + BIT2 + BIT6 + BIT7; // Assign I2C pins to USCI_B0 // Assign Uart pins to USCI_A0&lt;br /&gt;P1SEL2 |= BIT1 + BIT2 + BIT6 + BIT7; // Assign I2C pins to USCI_B0 // Assign Uart pins to USCI_A0&lt;br /&gt;init_I2C(); // initialize i2c&lt;br /&gt;initUart(); // initialize uart&lt;/p&gt;
&lt;p&gt;..&lt;/p&gt;
&lt;p&gt;..&lt;/p&gt;
&lt;p&gt;I2C init:&lt;/p&gt;
&lt;p&gt;void init_I2C(void) {&lt;br /&gt;UCB0CTL1 |= UCSWRST; // Enable SW reset&lt;br /&gt;UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode&lt;br /&gt;UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset&lt;br /&gt;UCB0BR0 = 10; // fSCL = 1Mhz/10 = ~100kHz&lt;br /&gt;UCB0BR1 = 0;&lt;br /&gt;UCB0I2CSA = itgAddress; // Slave Address is 069h&lt;br /&gt;UCB0CTL1 &amp;amp;= ~UCSWRST; // **Initialize USCI state machine**&lt;br /&gt;IE2 |= UCB0RXIE + UCB0TXIE; // Enable RX and TX interrupt&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Receive function:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;uint8_t Receive(char registerAddr){&lt;br /&gt;uint8_t receivedByte;&lt;br /&gt;while (UCB0CTL1 &amp;amp; UCTXSTP); // Ensure stop condition got sent&lt;br /&gt;UCB0CTL1 |= UCTR + UCTXSTT; // I2C start condition with UCTR flag for transmit&lt;br /&gt;while((IFG2 &amp;amp; UCB0TXIFG) == 0); //UCB0TXIFG is set immidiately&lt;br /&gt;UCB0TXBUF = registerAddr; //write registerAddr in TX buffer&lt;br /&gt;while((IFG2 &amp;amp; UCB0TXIFG) == 0); // wait until TX buffer is empty and transmitted&lt;br /&gt;UCB0CTL1 &amp;amp;= ~UCTR ; // Clear I2C TX flag for receive&lt;br /&gt;UCB0CTL1 |= UCTXSTT + UCTXNACK; // I2C start condition with NACK for single byte reading&lt;br /&gt;while (UCB0CTL1 &amp;amp; UCTXSTT); // Start condition sent? RXBuffer full?&lt;br /&gt;receivedByte = UCB0RXBUF;&lt;br /&gt;UCB0CTL1 |= UCTXSTP; // I2C stop condition&lt;br /&gt;return receivedByte;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Uart init:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;void initUart(void) {&lt;br /&gt;UCA0CTL1 |= UCSSEL_2; // Use SMCLK&lt;br /&gt;UCA0BR0 = 104; // 1MHz 9600&lt;br /&gt;UCA0BR1 = 0; // 1MHz 9600&lt;br /&gt;UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1&lt;br /&gt;UCA0CTL1 &amp;amp;= ~UCSWRST; // **Initialize USCI state machine**&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;integer print:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;void serialPrintInteger(uint16_t num)&lt;br /&gt;{&lt;br /&gt;int i;&lt;br /&gt;uint16_t num_send[5];&lt;br /&gt;uint16_t numTemp;&lt;br /&gt;num_send[0] = num/10000; // extract 5th digit&lt;br /&gt;numTemp = num % 10000; // get remaining 4&lt;br /&gt;num_send[1] = numTemp/1000; // extract 4th digit&lt;br /&gt;numTemp = numTemp % 1000; // get remamining 3&lt;br /&gt;num_send[2] = numTemp/100; // extract 3th digit&lt;br /&gt;numTemp = numTemp % 100; // get remaining 2&lt;br /&gt;num_send[3] = numTemp/10; // extract 2th digit&lt;br /&gt;num_send[4] = numTemp % 10; // extract 1th digit&lt;/p&gt;
&lt;p&gt;if(num_send[0] &amp;gt; 0) { // if num is 5 digit&lt;br /&gt;for(i = 0 ; i &amp;lt;= 4 ; i++)&lt;br /&gt;serialWrite(num_send[i]); // send each digit as one byte&lt;br /&gt;}&lt;br /&gt;else if(num_send[1] &amp;gt; 0) { // if num is 4 digit&lt;br /&gt;for(i = 1 ; i &amp;lt;= 4 ; i++)&lt;br /&gt;serialWrite(num_send[i]);&lt;br /&gt;}&lt;br /&gt;else if(num_send[2] &amp;gt; 0) { // if num is 3 digit&lt;br /&gt;for(i = 2 ; i &amp;lt;= 4 ; i++)&lt;br /&gt;serialWrite(num_send[i]);&lt;br /&gt;}&lt;br /&gt;else if(num_send[3] &amp;gt; 0) { // if num is 2 digit&lt;br /&gt;for(i = 3 ; i &amp;lt;= 4 ; i++)&lt;br /&gt;serialWrite(num_send[i]);&lt;br /&gt;}&lt;br /&gt;else { // if num is 1 digit&lt;br /&gt;serialWrite(num_send[4]);&lt;br /&gt;}&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;void serialPrintAscii(uint8_t ascii) {&lt;br /&gt;UCA0TXBUF = ascii;&lt;br /&gt;while (!(IFG2&amp;amp;UCA0TXIFG)); // USCI_A0 TX buffer ready?&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;/editend&amp;gt;&lt;/p&gt;
&lt;p&gt;And here is my problem. When i try these readings in my main loop seperately i get the results that i should have.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; serialPrintInteger(Receive(0x00));&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;serialPrintInteger(Receive(0x15));&lt;/p&gt;
&lt;p&gt;or&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;serialPrintInteger(Receive(0x16));&lt;/p&gt;
&lt;p&gt;and the outputs of these are 0x69 from Receive(0x00) which reads slave address register of the gyroscope, 9 from Receive(0x15) where i wrote 9 inside 0x15 register for configuration and 25 from Receive(0x16) where i wrote aswell.&lt;/p&gt;
&lt;p&gt;I don&amp;#39;t think my serialPrint functions are corrupted aswell, I&amp;#39;ve tried with a lot of combination under range of 16 bit where it should be. This sequence is working fine:&lt;/p&gt;
&lt;p&gt;serialPrintInteger(5);&lt;br /&gt; serialPrintAscii(Ascii_Comma);&lt;br /&gt; serialPrintInteger(10);&lt;br /&gt; serialPrintAscii(Ascii_And);&lt;br /&gt; serialPrintInteger(15);&lt;br /&gt; serialPrintAscii(Ascii_Dot);&lt;/p&gt;
&lt;p&gt;I see an output like this in my serial console: 5,10&amp;amp;15.5,10&amp;amp;15.5...&lt;/p&gt;
&lt;p&gt;The funny part starting when i try this logic on my Receive function. Here is the sequence i use&lt;/p&gt;
&lt;p&gt;serialPrintInteger(Receive(0x00)); // result 105&lt;br /&gt; serialPrintAscii(Ascii_Comma);&lt;br /&gt; serialPrintInteger(Receive(0x15)); // result 9&lt;br /&gt; serialPrintAscii(Ascii_And);&lt;br /&gt; serialPrintInteger(Receive(0x00)); // result 105&lt;br /&gt; serialPrintAscii(Ascii_Dot);&lt;/p&gt;
&lt;p&gt;The sequence in my console is like this: 105,105&amp;amp;9.105,105&amp;amp;9.105...&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First i thought i wasn&amp;#39;t properly send NACK to the slave for single byte and i thought it kept incrementing the register address on his own but they are working fine seperately and gyro has x,y,z registers aswell and they are not corrupting my sequence.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I was struggling with gyro motion registers for a while but i realised that I&amp;#39;m not in full control of my I2C just yet. So can you point out what i&amp;#39;m doing wrong here?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>MSP430G2553IN20 AND LM35CAZ TEMPERATURE READING PROBLEM</title><link>http://e2e.ti.com/thread/265781.aspx</link><pubDate>Sat, 18 May 2013 00:16:57 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:66d346dd-19f5-46d9-81f1-83cdc91b15b3</guid><dc:creator>Debasish Banerjee</dc:creator><slash:comments>3</slash:comments><comments>http://e2e.ti.com/thread/265781.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265781/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hello, I am a mere student, and completely new with my new board, I have managed to write the code with assistance from &lt;br /&gt;datasheets and google. The code reads the values from INCH_5 and INCH_10 consecutively and sends them via UART so it can &lt;br /&gt;be seen via hyperterminal or any of the other serial communication methods. The problem is, if I try to read the values for &lt;br /&gt;either internal or lm35caz, I mean only one of them, all the portions of the code seems to be giving the expected values, &lt;br /&gt;but when I try to read them consecutively via the code given as follows, only the very first time I get correct values &lt;br /&gt;from both sensors, after one loop, only the internal sensor reads it correctly, but the external reading is a fixed &lt;br /&gt;incorrect, it reads a fixed 114.32767 after its respective conversion...please help me with the necessary correction, &lt;br /&gt;thank you. P.S. Texas Instruments Rocks!&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Code:&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;#include &amp;lt;msp430g2553.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdbool.h&amp;gt;&lt;br /&gt;////////////////Defines////////////////&lt;br /&gt;#define LED1 BIT6&lt;br /&gt;#define LED0 BIT0&lt;br /&gt;#define Error BIT0&lt;br /&gt;#define GND BIT4&lt;br /&gt;#define DAT BIT5&lt;br /&gt;#define VCC BIT0 //port P2.0&lt;br /&gt;char buffer[4];&lt;br /&gt;float temp;&lt;br /&gt;int n_temp,r_temp;&lt;br /&gt;float v=0;&lt;br /&gt;////////////////Function Protos////////////////&lt;br /&gt;void m4302553_Init(void);&lt;br /&gt;void lm_init(void);&lt;br /&gt;void TX(char *tx_message);&lt;br /&gt;static char *i2a(unsigned i, char *a, unsigned r);&lt;br /&gt;char *itoa(int i, char *a, int r);&lt;br /&gt;static char *i2a(unsigned i, char *a, unsigned r)&lt;br /&gt;{&lt;br /&gt;if (i/r &amp;gt; 0) a = i2a(i/r,a,r);&lt;br /&gt;*a = &amp;quot;0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ&amp;quot;[i%r];&lt;br /&gt;return a+1;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;char *itoa(int i, char *a, int r)&lt;br /&gt;{&lt;br /&gt;if ((r &amp;lt; 2) || (r &amp;gt; 36)) r = 10;&lt;br /&gt;if (i &amp;lt; 0)&lt;br /&gt;{&lt;br /&gt;*a = &amp;#39;-&amp;#39;;&lt;br /&gt;*i2a(-(unsigned)i,a+1,r) = 0;&lt;br /&gt;}&lt;br /&gt;else *i2a(i,a,r) = 0;&lt;br /&gt;return a;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;void TX(char *tx_message)&lt;br /&gt;{&lt;br /&gt;unsigned int i=0; //Define end of string loop int&lt;br /&gt;char *message; // message variable&lt;br /&gt;unsigned int message_num; // define ascii int version variable&lt;br /&gt;message = tx_message; // move tx_message into message&lt;br /&gt;while(1)&lt;br /&gt;{&lt;br /&gt;if(message[i]==0) // If end of input string is reached, break loop.&lt;br /&gt;{break;}&lt;br /&gt;message_num = (int)message[i]; //Cast string char into a int variable&lt;br /&gt;UCA0TXBUF = message_num; // write INT to TX buffer&lt;br /&gt;i++; // increase string index&lt;br /&gt;__delay_cycles(10000); //transmission delay&lt;br /&gt;if(i&amp;gt;50) //prevent infinite transmit&lt;br /&gt;{&lt;br /&gt;P1OUT |= Error;&lt;br /&gt;break;&lt;br /&gt;}&lt;br /&gt;} // End TX Main While Loop&lt;br /&gt;} // End TX Function&lt;br /&gt;void m4302553_Init()&lt;br /&gt;{&lt;br /&gt;ADC10CTL0= ADC10ON + ADC10SHT_3+ADC10IE; ; //Temperature sensor supply REFON = 0, INCHx = 0Ah,&lt;br /&gt;//only ISENSOR current as reference,64 clocks for sample HOLDING TIME&lt;br /&gt;ADC10CTL1=INCH_10+ ADC10DIV_3; // ADC10clock/4, as 30 MicroSeconds is bare minimum&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;void lm_init()&lt;br /&gt;{&lt;br /&gt;/* Configure ADC Channel */&lt;br /&gt;ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE; //Vcc &amp;amp; Vss as reference&lt;br /&gt;ADC10CTL1 = INCH_5 + ADC10DIV_3 ; // Channel 5, ADC10CLK/4&lt;br /&gt;//ADC10AE0 |= BIT5; //P1.4 ADC option&lt;br /&gt;}&lt;br /&gt;////////////////////////////////MAIN PROGRAM LOOP//////////////////////////////////////////////////&lt;br /&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;WDTCTL = WDTPW + WDTHOLD; // Stop WDT&lt;br /&gt;BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz&lt;br /&gt;DCOCTL = CALDCO_1MHZ;&lt;br /&gt;////////////////USCI setup////////////////&lt;br /&gt;P1SEL = BIT1 + BIT2; // Set P1.1 to RXD and P1.2 to TXD&lt;br /&gt;P1SEL2 = BIT1 + BIT2; //&lt;br /&gt;UCA0CTL1 |= UCSSEL_2; // Have USCI use SMCLK AKA 1MHz main CLK&lt;br /&gt;UCA0BR0 = 104; // Baud: 9600, N= CLK/Baud, N= 10^6 / 9600&lt;br /&gt;UCA0BR1 = 0; // Set upper half of baud select to 0&lt;br /&gt;UCA0MCTL = UCBRS_1; // Modulation UCBRSx = 1&lt;br /&gt;UCA0CTL1 &amp;amp;= ~UCSWRST; // Start USCI&lt;br /&gt;////////////////General GPIO Defines////////////////&lt;br /&gt;P1DIR |= (LED1+GND+LED0); //Define GPIOs as outputs else GPIOs are inputs&lt;br /&gt;P2DIR |=VCC;&lt;br /&gt;//All Outputs off except for Green_LED&lt;br /&gt;P2OUT|=VCC;&lt;br /&gt;P1OUT&amp;amp;=~GND;&lt;br /&gt;//////////////SETUP ADC10 TO READ FROM CH A4 (P1.4)/////////////////////////////////////////////&lt;br /&gt;ADC10CTL0 &amp;amp;= ~ENC;&lt;br /&gt;lm_init();&lt;/p&gt;
&lt;p&gt;static int value=0,value2=0;&lt;br /&gt;////////////////Main Loop////////////////&lt;br /&gt;while(1)&lt;br /&gt;{&lt;br /&gt;__delay_cycles(1000); // Wait for ADC Ref to settle&lt;br /&gt;P1OUT = LED1;&lt;br /&gt;ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start&lt;br /&gt;__bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled&lt;br /&gt;value = ADC10MEM;&lt;br /&gt;P1OUT &amp;amp;=~LED1;&lt;br /&gt;temp=value*0.371; //temperature as float&lt;br /&gt;//split the float into integer and fraction part&lt;br /&gt;//C = A % B is equivalent to C = A ? B * (A / B)&lt;br /&gt;r_temp=((temp*10)-10) * ((temp*10)/10);&lt;br /&gt;itoa(temp, buffer, 10);&lt;br /&gt;TX(&amp;quot;LM35CAZ:&amp;quot;);&lt;br /&gt;TX(buffer);&lt;br /&gt;TX(&amp;quot;.&amp;quot;);&lt;br /&gt;itoa(r_temp, buffer, 10);&lt;br /&gt;TX(buffer);&lt;br /&gt;TX(&amp;quot; Degree Celsius\r\n&amp;quot;);&lt;br /&gt;ADC10CTL0&amp;amp;=~ENC;&lt;br /&gt;m4302553_Init();&lt;br /&gt;__delay_cycles(1000); // Wait for ADC Ref to settle&lt;br /&gt;P1OUT = LED0;&lt;br /&gt;ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start&lt;br /&gt;__bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled&lt;br /&gt;value2 = ADC10MEM;&lt;br /&gt;temp=value2 -273;//When REFON = 0, only ISENSOR applies during conversion,&lt;br /&gt;//TCSensor (273 + T [&amp;deg;C] ), gives kelvin calibrated value by default&lt;br /&gt;P1OUT &amp;amp;=~LED0;&lt;br /&gt;itoa(temp, buffer, 10);&lt;br /&gt;TX(&amp;quot;M430G2553:&amp;quot;);&lt;br /&gt;TX(buffer);&lt;br /&gt;TX(&amp;quot; Degree Celsius\r\n\n&amp;quot;);&lt;/p&gt;
&lt;p&gt;_delay_cycles(1000000);&lt;/p&gt;
&lt;p&gt;} // End While&lt;br /&gt;} // End Main Program&lt;/p&gt;
&lt;p&gt;// ADC10 interrupt service routine&lt;br /&gt;#pragma vector=ADC10_VECTOR&lt;br /&gt;__interrupt void ADC10_ISR (void)&lt;br /&gt;{&lt;br /&gt;__bic_SR_register_on_exit(CPUOFF); // Return to active mode&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>ADC10 - Seven segment display</title><link>http://e2e.ti.com/thread/265822.aspx</link><pubDate>Sat, 18 May 2013 18:39:23 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:54ebdbb7-da01-4fe2-a9a0-cf7077d3ff66</guid><dc:creator>G��� Turan</dc:creator><slash:comments>1</slash:comments><comments>http://e2e.ti.com/thread/265822.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265822/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hello all,&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve been trying to do an analog to digital conversion using MSP430 Launchpad. First I tried to reach every single bit in the ADC10MEM register but I gave up on that. Now, the thing I&amp;#39;ve been trying is to segmentize the ADC10MEM register, i.e, I will divide the value to 10 levels, and display the output on a seven segment display. The code is the following:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;#include &amp;quot;msp430g2231.h&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;void ConfigureAdc(void)&lt;/em&gt;&lt;br /&gt;&lt;em&gt;{&lt;/em&gt;&lt;br /&gt;&lt;em&gt; /* Configure ADC Channel */&lt;/em&gt;&lt;br /&gt;&lt;em&gt; ADC10CTL1 = INCH_5 + ADC10DIV_3 ; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Channel 5, ADC10CLK/4&lt;/em&gt;&lt;br /&gt;&lt;em&gt; ADC10CTL0 = SREF_0 + ADC10SHT_3 + ADC10ON + ADC10IE; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //Vcc &amp;amp; Vss as reference&lt;/em&gt;&lt;br /&gt;&lt;em&gt; ADC10AE0 |= BIT5; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//P1.5 ADC option&lt;/em&gt;&lt;br /&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;void main(void)&lt;/em&gt;&lt;br /&gt;&lt;em&gt;{&lt;/em&gt;&lt;br /&gt;&lt;em&gt; WDTCTL = WDTPW + WDTHOLD; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Stop WDT&lt;/em&gt;&lt;br /&gt;&lt;em&gt; BCSCTL1 = CALBC1_1MHZ; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Set range&lt;/em&gt;&lt;br /&gt;&lt;em&gt; DCOCTL = CALDCO_1MHZ;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; BCSCTL2 &amp;amp;= ~(DIVS_3); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // SMCLK = DCO = 1MHz&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1DIR |= 0xdf; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;em&gt;//All ports except P1.5 to output&lt;/em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1SEL |= BIT5; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;//ADC Input pin P1.5&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT &amp;amp;= ~(0xdf); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// 0 initialization&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;ConfigureAdc();&lt;/em&gt;&lt;br /&gt;&lt;em&gt; __enable_interrupt(); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Enable interrupts.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;while(1)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; {&lt;/em&gt;&lt;br /&gt;&lt;em&gt;__delay_cycles(1000); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Wait for ADC Ref to settle&lt;/em&gt;&lt;br /&gt;&lt;em&gt; ADC10CTL0 |= ENC + ADC10SC; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// Sampling and conversion start&lt;/em&gt;&lt;br /&gt;&lt;em&gt; __bis_SR_register(CPUOFF + GIE); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;// LPM0 with interrupts enabled&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;/* the part I divided ADC10MEM to 10 */&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;if(ADC10MEM &amp;gt; 922)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x4; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //these hex numbers are to display numbers from 9 to 0 in the seven segment&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 820)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x0;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 718)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0xF;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 616)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x20;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 514)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x24;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 412)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x4C;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 310)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x6;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 207)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x12;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else if(ADC10MEM &amp;gt; 105)&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x4F;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; else&lt;/em&gt;&lt;br /&gt;&lt;em&gt; P1OUT = 0x1;&lt;/em&gt;&lt;br /&gt;&lt;em&gt; }&lt;/em&gt;&lt;br /&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;// ADC10 interrupt service routine&lt;/em&gt;&lt;br /&gt;&lt;em&gt;#pragma vector=ADC10_VECTOR&lt;/em&gt;&lt;br /&gt;&lt;em&gt;__interrupt void ADC10_ISR (void)&lt;/em&gt;&lt;br /&gt;&lt;em&gt;{&lt;/em&gt;&lt;br /&gt;&lt;em&gt; __bic_SR_register_on_exit(CPUOFF); // Return to active mode&lt;/em&gt;&lt;br /&gt;&lt;em&gt;}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;As I tried this with voltages in a range from 0 to 3.3 &amp;nbsp;I got High from P1.2 and L from all others everytime and this is none of the outputs I gave to the seven segment in the if statements.&lt;/p&gt;
&lt;p&gt;I looked at all the example codes that TI published, I also read the User&amp;#39;s manuals many times but could not find a way out.&lt;/p&gt;
&lt;p&gt;Any help is appreciated,&lt;/p&gt;
&lt;p&gt;Best regards&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;G&amp;uuml;nay Turan&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>CC430F5137 does not work without debugger</title><link>http://e2e.ti.com/thread/244402.aspx</link><pubDate>Wed, 06 Feb 2013 19:30:51 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:488d1cb9-f5bb-48c6-93f8-bb0b303db025</guid><dc:creator>Leandro Benavente</dc:creator><slash:comments>2</slash:comments><comments>http://e2e.ti.com/thread/244402.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/244402/rss.aspx</wfw:commentRss><description>&lt;p&gt;We are debugging a new battery operated design based on a CC430F5137 (This is my first experience with MSP430 microprocessors).&lt;/p&gt;
&lt;p&gt;Software and hardware seem to work properly when connected to the debugger and running free, but when the board is feeded from the battery it does not start (or it is hanged).&amp;nbsp; I have tried to feed it from the USB debugger (only 3.6 v&amp;nbsp;and GND wires) but it fails to start. It only works under a debugging session.&lt;/p&gt;
&lt;p&gt;We are using Code Composer Studio 4.1.1 and eZ430-Chronos debugger.&lt;/p&gt;
&lt;p&gt;Anyone has experienced something similar?&lt;/p&gt;
&lt;p&gt;Comments are wellcome&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>I2C... Some issue in my code ?</title><link>http://e2e.ti.com/thread/258501.aspx</link><pubDate>Sun, 14 Apr 2013 12:36:08 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:33607b34-e461-4554-a34a-4c5bd90bce74</guid><dc:creator>Gege</dc:creator><slash:comments>15</slash:comments><comments>http://e2e.ti.com/thread/258501.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/258501/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi there,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I am currently trying to interface a eeprom through I2C communication interface (USCI) on my msp430g2553.The main parts of my code are pasted here :&lt;/p&gt;
&lt;p&gt;I have some issue i my code, impossible in first step to read the current data of my eeprom. It is not an hardware issue because, it works fine on another mcu (PIC !)&lt;/p&gt;
&lt;p&gt;So, it is ok for 0x53 slave address and permission to read/write at address 0x00.&lt;/p&gt;
&lt;p&gt;Any idea about the i2c code issue ?&lt;/p&gt;
&lt;p&gt;BR&lt;/p&gt;
&lt;p&gt;GM&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;PS : impossible to copy/and paste code with colors i e2e community forum....&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;#include&amp;nbsp; &amp;quot;msp430g2553.h&amp;quot;&lt;br /&gt;&lt;br /&gt;void I2C(void);&lt;br /&gt;unsigned char I2C_read_byte(unsigned char);&lt;br /&gt;void I2C_write_byte(unsigned char, unsigned char);&lt;br /&gt;&lt;br /&gt;void main(void){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;WDTCTL = WDTPW + WDTHOLD;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Stop WTD&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;I2C(); &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C configuration&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;__delay_cycles(2000);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Wait a little time !&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//I2C_write_byte(0x53, 0xAA);&amp;nbsp;&amp;nbsp; &amp;nbsp;// Write data&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;//__delay_cycles(2000);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// wait a little time more !&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned char toto = I2C_read_byte(0x00);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Read the data written...&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int tata = 9; //for mspdebug with &amp;quot;info locals&amp;quot;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void I2C(void){&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// First I2C configuration for MSP430g2553&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Go into reset state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL0 |= UCMST + UCMODE_3 + UCSYNC;// I2C master mode + I2C on USCI + Synchronous mode&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 &amp;amp;= ~UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Release for operation&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void I2C_write_byte(unsigned char adress, unsigned char data){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Go into reset state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0I2CSA = adress;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C slave adress&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCTR + UCTXSTT; &amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C in transmiter mode + start condition&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 &amp;amp;= ~UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Release for operation&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (!(IFG2 &amp;amp; UCB0TXIFG)); &amp;nbsp;&amp;nbsp; &amp;nbsp;// Wait for tx to be ready&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCA0TXBUF = data;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Write byte data ! ! ! &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Go into reset state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCTXSTP; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C stop condition&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 &amp;amp;= ~UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Release for operation&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;unsigned char I2C_read_byte(unsigned char adress){&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Go into reset state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0I2CSA = adress;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C slave adress&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCTXSTT; &amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C in recieve mode + start condition&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 &amp;amp;= ~UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Release for operation&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (!(IFG2 &amp;amp; UCB0RXIFG)); &amp;nbsp;&amp;nbsp; &amp;nbsp;// Wait for tx to be ready&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;unsigned char data_read = UCA0RXBUF;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Write byte data ! ! ! &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Go into reset state&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 |= UCTXSTP; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// I2C stop condition&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;UCB0CTL1 &amp;amp;= ~UCSWRST;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Release for operation&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return data_read;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Mspdebug indicate :&lt;/p&gt;
&lt;p&gt;Program received signal SIGTRAP, Trace/breakpoint trap.&lt;br /&gt;0x0000c140 in I2C_read_byte (adress=0 &amp;#39;\000&amp;#39;) at i2c3.c:45&lt;br /&gt;45&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (!(IFG2 &amp;amp; UCB0RXIFG)); &amp;nbsp;&amp;nbsp; &amp;nbsp;// Wait for tx to be ready&lt;br /&gt;(gdb) info locals&lt;br /&gt;data_read = 0 &amp;#39;\000&amp;#39;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Can VeRef+ be higher than Vcc?</title><link>http://e2e.ti.com/thread/265788.aspx</link><pubDate>Sat, 18 May 2013 04:01:46 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:9e95831c-cc4e-4a00-9330-7d54f9a46fb3</guid><dc:creator>Robbie Valentine</dc:creator><slash:comments>2</slash:comments><comments>http://e2e.ti.com/thread/265788.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265788/rss.aspx</wfw:commentRss><description>&lt;p&gt;Can the external positive voltage reference for the G series ADC10&amp;#39;s be higher than the chips Vcc value? &amp;nbsp;For example could I monitor a 4 volt or 5 volt signal with the ADC10 of an MSP430G chip using by setting the external voltage reference (VeREF+) to be 5 volts?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Thanks,&lt;/p&gt;
&lt;p&gt;Rob&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>when STOP and START conditions does not change</title><link>http://e2e.ti.com/thread/264749.aspx</link><pubDate>Tue, 14 May 2013 09:06:01 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:e638c98e-4160-4571-804c-e6ed2b623a56</guid><dc:creator>Dharani R</dc:creator><slash:comments>7</slash:comments><comments>http://e2e.ti.com/thread/264749.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/264749/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; can any explain me when UCTXSTT&amp;nbsp; and UCTXSTP&amp;nbsp;bits will not set its values even if we try to assign values to it. thank you.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>MSP430F5438 --&gt; I2C --&gt; LCD Display (Midas)</title><link>http://e2e.ti.com/thread/265803.aspx</link><pubDate>Sat, 18 May 2013 12:48:33 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:bca88dcb-ccdd-4214-855f-30201ff8b84f</guid><dc:creator>Albert Alvarez Carulla</dc:creator><slash:comments>0</slash:comments><comments>http://e2e.ti.com/thread/265803.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265803/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I have a problem with I&lt;sup&gt;2&lt;/sup&gt;C communication between MPS430F5438 (Master) and a LCD Display (Slave) (ST7032). I don&amp;#39;t recibe the ACK from the slave (All time NACK is set and TXIFG is always clear). I have read all type of documentation, examples, another posts,.. and I don&amp;#39;t find where the problem is.&lt;/p&gt;
&lt;p&gt;I attach the source code to see if you are able to find where is the problem (or to discard a software problem and start to search for a hardware problem).&lt;/p&gt;
&lt;p&gt;Thanks for you help!&lt;/p&gt;
&lt;hr width="100%" style="width:100%;" /&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;#include&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#2a00ff;font-size:x-small;"&gt;&lt;span style="color:#2a00ff;font-size:x-small;"&gt;&amp;lt;msp430.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;#include&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#2a00ff;font-size:x-small;"&gt;&lt;span style="color:#2a00ff;font-size:x-small;"&gt;&amp;lt;msp430f5438.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;#include&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; &lt;/span&gt;&lt;span style="color:#2a00ff;font-size:x-small;"&gt;&lt;span style="color:#2a00ff;font-size:x-small;"&gt;&amp;lt;UsrLib.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;byte&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; TX_Data[15];&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;byte&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; TX_Bytes;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;int&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; &lt;b&gt;main&lt;/b&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;) {&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;WDTCTL = WDTPW | WDTHOLD;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;// Stop &lt;span style="text-decoration:underline;"&gt;watchdog&lt;/span&gt; timer&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;_disable_interrupt();&lt;/p&gt;
&lt;p align="LEFT"&gt;initClk();&lt;/p&gt;
&lt;p align="LEFT"&gt;initJoyStickPort();&lt;/p&gt;
&lt;p align="LEFT"&gt;initI2C();&lt;/p&gt;
&lt;p align="LEFT"&gt;_enable_interrupt();&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;__delay_cycles(1000000);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;TX_Bytes&amp;nbsp;&amp;nbsp; =&amp;nbsp;&amp;nbsp;&amp;nbsp; 1;&lt;/p&gt;
&lt;p align="LEFT"&gt;TX_Data[0] = 0x38;&lt;/p&gt;
&lt;p align="LEFT"&gt;I2C_Transmit(TX_Data, TX_Bytes);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;TX_Bytes&amp;nbsp;&amp;nbsp; =&amp;nbsp;&amp;nbsp;&amp;nbsp; 1;&lt;/p&gt;
&lt;p align="LEFT"&gt;TX_Data[0] = 0x0F;&lt;/p&gt;
&lt;p align="LEFT"&gt;I2C_Transmit(TX_Data, TX_Bytes);&lt;/p&gt;
&lt;p align="LEFT"&gt;__delay_cycles(1000);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(1);&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; 0;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;}&lt;/p&gt;
&lt;hr width="100%" style="width:100%;" /&gt;
&lt;p align="LEFT"&gt;void&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; &lt;b&gt;initI2C&lt;/b&gt;(&lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;void&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;){&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;//&lt;span style="text-decoration:underline;"&gt;Extraido&lt;/span&gt; &lt;span style="text-decoration:underline;"&gt;del&lt;/span&gt; UserGuide:&lt;/p&gt;
&lt;p align="LEFT"&gt;//&lt;/p&gt;
&lt;p align="LEFT"&gt;// 1. Set UCSWRST (BIS.B #UCSWRST,&amp;amp;UCxCTL1)&lt;/p&gt;
&lt;p align="LEFT"&gt;// 2. Initialize all USCI registers with UCSWRST=1 (including UCxCTL1)&lt;/p&gt;
&lt;p align="LEFT"&gt;// 3. Configure ports.&lt;/p&gt;
&lt;p align="LEFT"&gt;// 4. Clear UCSWRST via software (BIC.B #UCSWRST,&amp;amp;UCxCTL1)&lt;/p&gt;
&lt;p align="LEFT"&gt;// 5. Enable interrupts (optional) via UCxRXIE and/or UCxTXIE&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0CTL1 |= UCSWRST;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;//Reset ON&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0CTL0 = (UCMST | UCMODE_3 | UCSYNC);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;//Master/I2C &lt;span style="text-decoration:underline;"&gt;Modo&lt;/span&gt;/&lt;span style="text-decoration:underline;"&gt;Sincrono&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0CTL1 = (UCSSEL__SMCLK | UCTR | UCSWRST);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;//SMCLK = 16 MHz/&lt;span style="text-decoration:underline;"&gt;Transmisor&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0BR0&amp;nbsp; = 0x28;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;// Divisor &lt;span style="text-decoration:underline;"&gt;de&lt;/span&gt; &lt;span style="text-decoration:underline;"&gt;frecuencia&lt;/span&gt; (40 --&amp;gt; 400kHz)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0BR1&amp;nbsp; = 0x00;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;//&lt;span style="text-decoration:underline;"&gt;Configuramos&lt;/span&gt; &lt;span style="text-decoration:underline;"&gt;los&lt;/span&gt; pines P3.1 y P3.2 &lt;span style="text-decoration:underline;"&gt;para&lt;/span&gt; el I2C&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; P3SEL&amp;nbsp; = (SDA | SCL);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0I2CSA = 0x3E;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;//ID Display (0111110)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp; UCB0CTL1 &amp;amp;= ~(UCSWRST);&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;&lt;span style="color:#3f7f5f;font-size:x-small;"&gt;//Reset OFF&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;}&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;　&lt;/p&gt;
&lt;p align="LEFT"&gt;void&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="font-size:x-small;"&gt; &lt;b&gt;I2C_Transmit&lt;/b&gt;(&lt;/span&gt;&lt;span style="color:#005032;font-size:x-small;"&gt;&lt;span style="color:#005032;font-size:x-small;"&gt;byte&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TX_Data[15], &lt;/span&gt;&lt;span style="color:#005032;font-size:x-small;"&gt;&lt;span style="color:#005032;font-size:x-small;"&gt;byte&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; TX_Bytes){&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;span style="color:#005032;font-size:x-small;"&gt;&lt;span style="color:#005032;font-size:x-small;"&gt;byte&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt; Byte_Counter = 0;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;UCB0IFG = 0x00;&lt;/p&gt;
&lt;p align="LEFT"&gt;UCB0CTL1 |= UCTR;&lt;/p&gt;
&lt;p align="LEFT"&gt;UCB0CTL1 |= UCTXSTT;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;for&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;(Byte_Counter = 0; Byte_Counter &amp;lt; TX_Bytes; Byte_Counter++){&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;UCB0TXBUF = TX_Data[Byte_Counter];&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;while&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;((UCB0IFG &amp;amp; UCTXIFG) == 0);&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;((UCB0STAT &amp;amp; UCNACKIFG)!=0) &lt;/span&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;}&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;UCB0CTL1 |= UCTXSTP;&lt;/p&gt;
&lt;p align="LEFT"&gt;&lt;b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;span style="color:#7f0055;font-size:x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p align="LEFT"&gt;}&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>external oscillator</title><link>http://e2e.ti.com/thread/265797.aspx</link><pubDate>Sat, 18 May 2013 09:48:59 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:35c46b5f-9c77-4f1c-8056-5c89b21b8263</guid><dc:creator>Enzo Ternavasio</dc:creator><slash:comments>2</slash:comments><comments>http://e2e.ti.com/thread/265797.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265797/rss.aspx</wfw:commentRss><description>&lt;p&gt;Micro MSP430F5171&lt;/p&gt;
&lt;p&gt;At 20 Mhz with its internal clock i have found a lot of instability. Thsi with 2 different boards.&lt;/p&gt;
&lt;p&gt;So i decided to put a 24MHz extarnal oscillator in hope this wil fix all. Clock inialization is:&lt;/p&gt;
&lt;p&gt;void clock(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;volatile unsigned long i;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;// Increase Vcore setting to level3 to support fsystem=25MHz&lt;br /&gt;&amp;nbsp;// NOTE: Change core voltage one level at a time..&lt;br /&gt;&amp;nbsp;SetVcoreUp (0x01);&lt;br /&gt;&amp;nbsp;SetVcoreUp (0x02);&lt;br /&gt;&amp;nbsp;SetVcoreUp (0x03);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // configure clocks&lt;br /&gt;&amp;nbsp; UCSCTL1|=DISMOD;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Disable modulator&lt;br /&gt;&amp;nbsp; UCSCTL4=0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //ACLK=SMCLK=MCLK=XT1&lt;br /&gt;&amp;nbsp; UCSCTL6|=XT1DRIVE_3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Drive strength for 25MHz&lt;br /&gt;&amp;nbsp; UCSCTL6|=XTS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //HF oscillator - 1 or 0 should not be important&lt;br /&gt;&amp;nbsp; UCSCTL6|=XT1BYPASS;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //XT1 bypass oscillator circuit&lt;br /&gt;&amp;nbsp; UCSCTL6&amp;amp;=~XT1OFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; //XT1 enabled&lt;/p&gt;
&lt;p&gt;&amp;nbsp; __delay_cycles(782000);&lt;/p&gt;
&lt;p&gt;&amp;nbsp; // Loop until XT1&amp;nbsp; fault flag is cleared&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCSCTL7 &amp;amp;= ~(XT1LFOFFG + XT1HFOFFG+ DCOFFG);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Clear XT1,DCO fault flags&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SFRIFG1 &amp;amp;= ~OFIFG;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Clear fault flags&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }while (SFRIFG1&amp;amp;OFIFG);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Test oscillator fault flag&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;but it doesn&amp;#39;t exit loop, fault flag is always on.&lt;/p&gt;
&lt;p&gt;Thanks, Enzo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>timer problem to count external clock</title><link>http://e2e.ti.com/thread/265021.aspx</link><pubDate>Wed, 15 May 2013 05:37:24 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:d0795433-bd26-410a-87cb-27e8e236b6c6</guid><dc:creator>karan patel1</dc:creator><slash:comments>7</slash:comments><comments>http://e2e.ti.com/thread/265021.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265021/rss.aspx</wfw:commentRss><description>&lt;p&gt;i am useing msp430f4270 controller. i want to calculate external clock so i give this clock as input to 74hc14 smit trigger ic and give its output to p1.5 pin as input. but my timer is not counting pulse correctly................ in input of 74hc14 pulses comes good but in out put pulse is not as good as input to this ic so is there is any problem with pin setting?????? i atteched pin setting snapsot and schemetic diagram here ...i cant attech cro snapshot........&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;if i give 70,000 pulse its only count 24062..................&lt;a href="http://e2e.ti.com/cfs-file.ashx/__key/communityserver-discussions-components-files/166/3681.t.JPG"&gt;&lt;img src="http://e2e.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/166/3681.t.JPG" border="0" alt=" " /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;here i corrected error regarding ground &amp;nbsp;appear in schematic and now i can debug so problem is of timer........&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;so sorry its hardware issue my ground is not common now its resolved.......&lt;/p&gt;
&lt;p&gt;now timer counts good but now problem is of accuracy..........&lt;/p&gt;
&lt;p&gt;if i give it 1000 pulsew with freq=250 &amp;nbsp;its count 1003 and some times 1005&lt;/p&gt;
&lt;p&gt;here is code&lt;/p&gt;
&lt;p&gt;-----------------------------code--------------------------------&lt;/p&gt;
&lt;p&gt;#pragma vector=BASICTIMER_VECTOR&lt;br /&gt;__interrupt void basic_timer(void)&lt;br /&gt;{&lt;br /&gt; &lt;br /&gt; cal_flag=1;&lt;br /&gt; if(count==0)&lt;br /&gt; pulse_flag=1;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;void calculation (void)&lt;br /&gt;{&lt;br /&gt; if(cal_flag==1)&lt;br /&gt; {&lt;br /&gt; pval=cval; &lt;br /&gt; cval=TAR;&lt;br /&gt; cval=TAR; &lt;br /&gt; if(cval != pval)&lt;br /&gt; {&lt;br /&gt; if(cval&amp;lt;pval)&lt;br /&gt; {&lt;br /&gt; pval=0xFFFF-pval;&lt;br /&gt; dif=cval+pval;&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; dif=cval-pval;&lt;br /&gt; total2=total2+dif;&lt;br /&gt; n1=1;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;void conversion(void)&lt;br /&gt;{&lt;br /&gt; if(n1==1)&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt; total=total2%1000000;&lt;br /&gt; n2=1;&lt;br /&gt; n1=0;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;void main(void)&lt;br /&gt;{&lt;br /&gt;WDTCTL = WDTPW + WDTHOLD;&lt;br /&gt;&lt;br /&gt; while(1)&lt;br /&gt; {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; calculation();&lt;br /&gt; conversion();&lt;br /&gt; output();&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;void output(void)&lt;br /&gt;{&lt;br /&gt; if(n2==1)&lt;br /&gt; {&lt;br /&gt; n2=0;&lt;br /&gt; cal_flag=0;&lt;br /&gt; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;any suggestion ????????????????&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>TACCR0 interrupt, LPM0, ACLK as capture</title><link>http://e2e.ti.com/thread/265685.aspx</link><pubDate>Fri, 17 May 2013 14:10:52 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:ebf47c13-f10f-443b-ac8b-f09d12b6f7d5</guid><dc:creator>Valentin TRIMAILLE</dc:creator><slash:comments>2</slash:comments><comments>http://e2e.ti.com/thread/265685.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/265685/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I am trying to use the TACCR0 interrupt and to wait for the capture in LPM0. (The capture is from ACLK : a 32.768kHz crystal).&lt;/p&gt;
&lt;p&gt;I pasted a sample code. It turns on P1.6 before going in LPM0. The ISR just exits LPM0, and P1.6 is turned off.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;When I don&amp;#39;t enter into LPM0, and poll the CCIFG flag I get a 21-22&amp;micro;s on-time on P1.6 : while(!(TA0CCTL0 &amp;amp; CCIFG));&lt;/p&gt;
&lt;p&gt;If I enter LPM0, the on-time is constantly changing, from 21&amp;micro;s to ~80&amp;micro;s.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Can you help me ?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Val&amp;#39;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;#include &amp;quot;msp430.h&amp;quot;&lt;br /&gt;#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp;* main.c&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;int main(void) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;WDTCTL = WDTPW + WDTHOLD;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;BCSCTL1 = CALBC1_1MHZ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set DCO to 1, 8, 12 or 16MHz&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;DCOCTL = CALDCO_1MHZ;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;BCSCTL1 |= DIVA_0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // ACLK/(0:1,1:2,2:4,3:8)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;BCSCTL3 |= LFXT1S_0 + XCAP_3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // LFXT1 = 32768-Hz crystal on LFXT1 + 12.5pF caps&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1OUT &amp;amp;= ~BIT6;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Clear Port 1 bits&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P1DIR |= BIT6;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Set P1.6 as output pin&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P2OUT = 0x00;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Drive all Port 2 pins low&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;P2DIR = 0xFF;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Configure all Port 2 pins outputs&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;TA0CTL = TASSEL_3+MC_2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TACLK, cont mode&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while(1) {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1OUT |= BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TA0CCTL0 = CM_3+CCIS_1+CAP+CCIE;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Pos&amp;amp;Neg,ACLK (CCI0B),Cap &amp;amp; interrupt&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //while(!(TA0CCTL0 &amp;amp; CCIFG));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// wait for capture event&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _BIS_SR(LPM0_bits+GIE);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; P1OUT &amp;amp;= ~BIT6;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#pragma vector=TIMER0_A1_VECTOR&lt;br /&gt;__interrupt void timerA0_capture_event(void) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _BIC_SR_IRQ(LPM0_bits);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Clear LPM0 bits from 0(SR)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TA0CCTL0 &amp;amp;= ~CCIFG;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>PWM</title><link>http://e2e.ti.com/thread/259436.aspx</link><pubDate>Thu, 18 Apr 2013 02:13:42 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:e0295964-0897-4752-a62c-92c5ef278298</guid><dc:creator>David Ramirez</dc:creator><slash:comments>24</slash:comments><comments>http://e2e.ti.com/thread/259436.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/259436/rss.aspx</wfw:commentRss><description>&lt;p&gt;Hi&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I have a question charge in the TACCR0 register a period and in the TACCR1 a cycle useful in the case where useful cycle is equal to the period sends a logical one but that generates some kind of inconvenience?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Error: "Could not find MSP-FET430UIF on specified COM port</title><link>http://e2e.ti.com/thread/264967.aspx</link><pubDate>Tue, 14 May 2013 22:55:03 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:cc91a0c8-ec0a-4000-a3c2-704c0d90378a</guid><dc:creator>Julio Reyes</dc:creator><slash:comments>6</slash:comments><comments>http://e2e.ti.com/thread/264967.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/264967/rss.aspx</wfw:commentRss><description>&lt;p&gt;i have a problem:&lt;/p&gt;
&lt;p&gt;Error: &amp;quot;Could not find MSP-FET430UIF on specified COM port&lt;/p&gt;
&lt;p&gt;when i first bought the launchpad, and i conect it to mi laptop, and then, i install the code composer studio....so the problem appeared.....so&lt;/p&gt;
&lt;p&gt;when i reinstall the ccs and the MSP430 launchpad .....and i hope to solve the problem , i got the same results:&lt;/p&gt;
&lt;p&gt;Error: &amp;quot;Could not find MSP-FET430UIF on specified COM port&lt;/p&gt;
&lt;p&gt;please, help me.&lt;/p&gt;
&lt;p&gt;i have a Toshiba Laptop with windows 7&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>TI microcontrollers/DSP: Where's the Transfer Function plot for ADC?</title><link>http://e2e.ti.com/thread/253283.aspx</link><pubDate>Wed, 20 Mar 2013 15:58:15 GMT</pubDate><guid isPermaLink="false">cb01d8b2-d089-468d-babb-77d1d8683490:220bfade-a685-4ef0-b7dc-d2d7e38cc525</guid><dc:creator>Rodrigues</dc:creator><slash:comments>36</slash:comments><comments>http://e2e.ti.com/thread/253283.aspx</comments><wfw:commentRss>http://e2e.ti.com/support/microcontrollers/msp430/f/166/t/253283/rss.aspx</wfw:commentRss><description>&lt;p&gt;&lt;span class="hps"&gt;&lt;span class="hps"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; This present question&lt;/span&gt; &lt;span class="hps"&gt;is&lt;/span&gt; targeted &lt;span class="hps"&gt;to the&lt;/span&gt; &lt;span class="hps"&gt;engineering team at&lt;/span&gt; &lt;span class="hps"&gt;TI&lt;/span&gt;&lt;span class="hps"&gt;.&lt;/span&gt; &lt;span class="hps"&gt;In recent&lt;/span&gt; &lt;span class="hps"&gt;years I have&lt;/span&gt; &lt;span class="hps"&gt;discussed&lt;/span&gt; &lt;span class="hps"&gt;the matter with&lt;/span&gt; &lt;span class="hps"&gt;several experts&lt;/span&gt; &lt;span class="hps"&gt;in industry&amp;nbsp;&lt;/span&gt;&lt;span class="hps"&gt;and book authors.&amp;nbsp;TI seems to be the only company that shows 2^n-1 factor on ADC conversion equation (where &amp;quot;n&amp;quot; is the ADC resolution). In the past, t&lt;span class="hps"&gt;he subject&lt;/span&gt; &lt;span class="hps"&gt;has been&lt;/span&gt; &lt;span class="hps"&gt;discussed&lt;/span&gt; &lt;span class="hps"&gt;a few times&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span class="hps"&gt;but&lt;/span&gt; I think that &lt;span class="hps"&gt;TI&lt;/span&gt; &lt;span class="hps"&gt;could&lt;/span&gt;&amp;nbsp;&lt;span class="hps"&gt;answer&lt;/span&gt; it &lt;span class="hps"&gt;once and for&lt;/span&gt; &lt;span class="hps"&gt;all. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="hps"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; For example, consider&amp;nbsp;an ideal &lt;strong&gt;3 bi&lt;/strong&gt;t ADC transfer function (figure below): The vertical axis shows seven intervals (2^n-1) and horizontal axis shows eight intervals (2^n). This is true also for 0.5 LSB input compensated ADC. The final transition (from 110 to 111) occurs when input reaches 1 LSB below Vref or 1.5 LSB below Vref. In other words, the transfer functions are something like:&lt;span style="text-decoration:underline;"&gt;&lt;/span&gt;&lt;span style="text-decoration:underline;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;1. For an ideal 3 bit ADC with no compensation on input:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;strong&gt;Nadc = int (Vin/Vref*8)&lt;/strong&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2. For an ideal 3 bit ADC with 0.5 LSB compensation on input:&lt;span style="text-decoration:underline;"&gt;&lt;/span&gt;&lt;span style="text-decoration:underline;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Nadc = int ((Vin + 0.5 LSB)/Vref*8)&lt;/strong&gt;&lt;/strong&gt;&lt;b&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/b&gt;&lt;span style="text-decoration:underline;"&gt;&lt;/span&gt;&lt;span style="text-decoration:underline;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;So, with n = 10, the discussion moves to&amp;nbsp;1023 and 1024&amp;nbsp;factors.&amp;nbsp; The point is that virtually all the other microcontrollers (Renesas, Atmel, NXP, Freescale, ...) exhibit the 2^n factor on equation conversion (than 2^n-1) on its embedded ADCs. I think it would be very interesting to see a conversion plot, similar that below, for TI microcontrollers (ex. MSP430);&amp;nbsp;&amp;nbsp;&lt;span class="hps"&gt;but&lt;/span&gt; &lt;span class="hps"&gt;no one can&lt;/span&gt; &lt;span class="hps"&gt;find&amp;nbsp;&lt;/span&gt;it.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://e2e.ti.com/cfs-file.ashx/__key/communityserver-discussions-components-files/166/6153.ADC_5F00_TransferFunction.jpg"&gt;&lt;img border="0" alt=" " src="http://e2e.ti.com/resized-image.ashx/__size/550x0/__key/communityserver-discussions-components-files/166/6153.ADC_5F00_TransferFunction.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>