Rev 1 | Rev 110 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1 | Rev 41 | ||
---|---|---|---|
Line 52... | Line 52... | ||
52 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
52 | // + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
53 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
53 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
54 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
54 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
55 | // + POSSIBILITY OF SUCH DAMAGE. |
55 | // + POSSIBILITY OF SUCH DAMAGE. |
56 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
56 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
- | 57 | #include "91x_lib.h" |
|
57 | #include "main.h" |
58 | #include "uart1.h" |
58 | - | ||
- | 59 | #include "usb.h" |
|
59 | //----------------------------------------------------------------- |
60 | //----------------------------------------------------------------- |
60 | void USB_ConfigInit(void) |
61 | void USB_ConfigInit(void) |
61 | { |
62 | { |
62 | GPIO_InitTypeDef GPIO_InitStructure; |
63 | GPIO_InitTypeDef GPIO_InitStructure; |
Line 63... | Line 64... | ||
63 | 64 | ||
- | 65 | SerialPutString("\r\n USB init..."); |
|
- | 66 | #ifdef MCLK96MHZ |
|
- | 67 | //USB clock = MCLK/2 = 48MHz |
|
64 | SerialPutString("USB init..."); |
68 | SCU_USBCLKConfig(SCU_USBCLK_MCLK2); |
65 | 69 | #else |
|
66 | //USB clock = MCLK= 48MHz |
70 | //USB clock = MCLK = 48MHz |
- | 71 | SCU_USBCLKConfig(SCU_USBCLK_MCLK); |
|
67 | SCU_USBCLKConfig(SCU_USBCLK_MCLK); |
72 | #endif |
68 | //Enable USB clock |
73 | //Enable USB clock |
69 | SCU_AHBPeriphClockConfig(__USB,ENABLE); |
74 | SCU_AHBPeriphClockConfig(__USB,ENABLE); |
70 | SCU_AHBPeriphReset(__USB,DISABLE); |
75 | SCU_AHBPeriphReset(__USB,DISABLE); |
Line 71... | Line 76... | ||
71 | SCU_AHBPeriphClockConfig(__USB48M,ENABLE); |
76 | SCU_AHBPeriphClockConfig(__USB48M,ENABLE); |
72 | 77 | ||
73 | //Configure GPIO0 (D+ Pull-Up on P0.1) |
78 | //Configure GPIO0 (D+ Pull-Up on P0.1) |
Line 74... | Line 79... | ||
74 | SCU_APBPeriphClockConfig(__GPIO0 ,ENABLE); |
79 | SCU_APBPeriphClockConfig(__GPIO0 ,ENABLE); |
- | 80 | SCU_APBPeriphReset(__GPIO0,DISABLE); |
|
75 | SCU_APBPeriphReset(__GPIO0,DISABLE); |
81 | |
76 | 82 | // GPIO_DeInit(P0.1); |
|
77 | // GPIO_DeInit(GPIO0); |
83 | GPIO_StructInit(&GPIO_InitStructure); |
78 | GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; |
84 | GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; |
79 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; |
85 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; |
Line 88... | Line 94... | ||
88 | VIC_Config(USBLP_ITLine, VIC_IRQ, 2); |
94 | VIC_Config(USBLP_ITLine, VIC_IRQ, 2); |
89 | VIC_ITCmd(USBLP_ITLine, ENABLE); |
95 | VIC_ITCmd(USBLP_ITLine, ENABLE); |
Line 90... | Line 96... | ||
90 | 96 | ||
Line 91... | Line 97... | ||
91 | USB_Init(); |
97 | USB_Init(); |
92 | - | ||
93 | SerialPutString("ok\n\r"); |
98 | |
Line 94... | Line 99... | ||
94 | 99 | SerialPutString("ok"); |
|
95 | } |
100 | } |
96 | 101 | ||
Line 107... | Line 112... | ||
107 | void USB_Send_String(u8 *StrPtr) |
112 | void USB_Send_String(u8 *StrPtr) |
108 | { |
113 | { |
109 | u8 i = 0; |
114 | u8 i = 0; |
110 | u16 timeout = 0; |
115 | u16 timeout = 0; |
Line 111... | Line 116... | ||
111 | 116 | ||
112 | while (StrPtr[i++] !=0){} |
117 | while (StrPtr[i++] !=0){} // get string len |
113 | while (_GetEPTxStatus(ENDP1) != EP_TX_NAK){ if (timeout++ > 60000) return;} |
118 | while (_GetEPTxStatus(ENDP1) != EP_TX_NAK){ if (timeout++ > 60000) return;} |
114 | UserToPMABufferCopy(StrPtr, ENDP1_TXADDR, ++i); |
119 | UserToPMABufferCopy(StrPtr, ENDP1_TXADDR, ++i); // copy string to usb buffer |
115 | SetEPTxCount(ENDP1,i); |
120 | SetEPTxCount(ENDP1,i); |
116 | SetEPTxValid(ENDP1); |
121 | SetEPTxValid(ENDP1); |
Line 117... | Line 122... | ||
117 | } |
122 | } |
Line 123... | Line 128... | ||
123 | while (_GetEPTxStatus(ENDP1) != EP_TX_NAK){ if (timeout++ > 60000) return;} |
128 | while (_GetEPTxStatus(ENDP1) != EP_TX_NAK){ if (timeout++ > 60000) return;} |
124 | UserToPMABufferCopy(&ch, ENDP1_TXADDR, 2); |
129 | UserToPMABufferCopy(&ch, ENDP1_TXADDR, 2); |
125 | SetEPTxCount(ENDP1,2); |
130 | SetEPTxCount(ENDP1,2); |
126 | SetEPTxValid(ENDP1); |
131 | SetEPTxValid(ENDP1); |
127 | } |
132 | } |
- | 133 | ||
128 | //----------------------------------------------------------------- |
134 | //----------------------------------------------------------------- |
129 | void USB_Send_Data(u8 *data, u16 count) |
135 | void USB_Send_Data(u8 *data, u16 count) |
130 | { |
136 | { |
131 | u16 timeout = 0; |
- | |
132 | u8 i; |
137 | u8 i; |
133 | - | ||
134 | - | ||
135 | count++; |
138 | count++; |
Line 136... | Line 139... | ||
136 | 139 | ||
137 | for (i=0;i< (count/64)+1;i++) |
140 | for (i=0;i< (count/64)+1;i++) |
138 | { |
141 | { |
139 | while (_GetEPTxStatus(ENDP1) != EP_TX_NAK); |
142 | while (_GetEPTxStatus(ENDP1) != EP_TX_NAK); |
- | 143 | if (i < (count/64)) |
|
140 | if (i < (count/64)) |
144 | { |
141 | { UserToPMABufferCopy(&data[i*64], ENDP1_TXADDR, 64); |
145 | UserToPMABufferCopy(&data[i*64], ENDP1_TXADDR, 64); |
142 | SetEPTxCount(ENDP1,64); |
146 | SetEPTxCount(ENDP1,64); |
143 | } |
147 | } |
- | 148 | else |
|
144 | else |
149 | { |
145 | { UserToPMABufferCopy(&data[i*64], ENDP1_TXADDR, count % 64); |
150 | UserToPMABufferCopy(&data[i*64], ENDP1_TXADDR, count % 64); |
146 | SetEPTxCount(ENDP1, count % 64); |
151 | SetEPTxCount(ENDP1, count % 64); |
Line 147... | Line 152... | ||
147 | } |
152 | } |
148 | 153 |