added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
80:bdf1132a57cf
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 80:bdf1132a57cf 1 /* mbed Microcontroller Library
mbed_official 80:bdf1132a57cf 2 * Copyright (c) 2006-2015 ARM Limited
mbed_official 80:bdf1132a57cf 3 *
mbed_official 80:bdf1132a57cf 4 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 80:bdf1132a57cf 5 * you may not use this file except in compliance with the License.
mbed_official 80:bdf1132a57cf 6 * You may obtain a copy of the License at
mbed_official 80:bdf1132a57cf 7 *
mbed_official 80:bdf1132a57cf 8 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 80:bdf1132a57cf 9 *
mbed_official 80:bdf1132a57cf 10 * Unless required by applicable law or agreed to in writing, software
mbed_official 80:bdf1132a57cf 11 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 80:bdf1132a57cf 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 80:bdf1132a57cf 13 * See the License for the specific language governing permissions and
mbed_official 80:bdf1132a57cf 14 * limitations under the License.
mbed_official 80:bdf1132a57cf 15 */
mbed_official 80:bdf1132a57cf 16 #include <string.h>
mbed_official 80:bdf1132a57cf 17
mbed_official 80:bdf1132a57cf 18 #include "ethernet_api.h"
mbed_official 80:bdf1132a57cf 19 #include "mps2_ethernet_api.h"
mbed_official 80:bdf1132a57cf 20 #include "cmsis.h"
mbed_official 80:bdf1132a57cf 21 #include "mbed_interface.h"
mbed_official 80:bdf1132a57cf 22 #include "toolchain.h"
mbed_official 80:bdf1132a57cf 23 #include "mbed_error.h"
mbed_official 80:bdf1132a57cf 24 #include "ETH_MPS2.h"
mbed_official 80:bdf1132a57cf 25 #include "wait_api.h"
mbed_official 80:bdf1132a57cf 26
mbed_official 80:bdf1132a57cf 27 #define TX_PKT_SIZE 256
mbed_official 80:bdf1132a57cf 28 #define RX_PKT_SIZE 300
mbed_official 80:bdf1132a57cf 29
mbed_official 80:bdf1132a57cf 30 // Types
mbed_official 80:bdf1132a57cf 31 #undef FALSE
mbed_official 80:bdf1132a57cf 32 #undef TRUE
mbed_official 80:bdf1132a57cf 33 #define FALSE 0
mbed_official 80:bdf1132a57cf 34 #define TRUE 1
mbed_official 80:bdf1132a57cf 35
mbed_official 80:bdf1132a57cf 36 /*----------------------------------------------------------------------------
mbed_official 80:bdf1132a57cf 37 Ethernet Device initialize
mbed_official 80:bdf1132a57cf 38 *----------------------------------------------------------------------------*/
mbed_official 80:bdf1132a57cf 39 int ethernet_init()
mbed_official 80:bdf1132a57cf 40 {
mbed_official 80:bdf1132a57cf 41 int error;
mbed_official 80:bdf1132a57cf 42 error = 0;
mbed_official 80:bdf1132a57cf 43
mbed_official 80:bdf1132a57cf 44 if(smsc9220_check_id()) {
mbed_official 80:bdf1132a57cf 45 error = TRUE;
mbed_official 80:bdf1132a57cf 46 }
mbed_official 80:bdf1132a57cf 47
mbed_official 80:bdf1132a57cf 48 if(smsc9220_soft_reset()) {
mbed_official 80:bdf1132a57cf 49 error = TRUE;
mbed_official 80:bdf1132a57cf 50 }
mbed_official 80:bdf1132a57cf 51
mbed_official 80:bdf1132a57cf 52 smsc9220_set_txfifo(5);
mbed_official 80:bdf1132a57cf 53
mbed_official 80:bdf1132a57cf 54 // Sets automatic flow control thresholds, and backpressure
mbed_official 80:bdf1132a57cf 55 // threshold to defaults specified.
mbed_official 80:bdf1132a57cf 56 SMSC9220->AFC_CFG = 0x006E3740;
mbed_official 80:bdf1132a57cf 57
mbed_official 80:bdf1132a57cf 58 if(smsc9220_wait_eeprom()) {
mbed_official 80:bdf1132a57cf 59 error = TRUE;
mbed_official 80:bdf1132a57cf 60 }
mbed_official 80:bdf1132a57cf 61
mbed_official 80:bdf1132a57cf 62 // Configure GPIOs as LED outputs.
mbed_official 80:bdf1132a57cf 63 SMSC9220->GPIO_CFG = 0x70070000;
mbed_official 80:bdf1132a57cf 64
mbed_official 80:bdf1132a57cf 65 smsc9220_init_irqs();
mbed_official 80:bdf1132a57cf 66
mbed_official 80:bdf1132a57cf 67 /* Configure MAC addresses here if needed. */
mbed_official 80:bdf1132a57cf 68
mbed_official 80:bdf1132a57cf 69 if(smsc9220_check_phy()) {
mbed_official 80:bdf1132a57cf 70 error = TRUE;
mbed_official 80:bdf1132a57cf 71 }
mbed_official 80:bdf1132a57cf 72
mbed_official 80:bdf1132a57cf 73 if(smsc9220_reset_phy()) {
mbed_official 80:bdf1132a57cf 74 error = TRUE;
mbed_official 80:bdf1132a57cf 75 return error;
mbed_official 80:bdf1132a57cf 76 }
mbed_official 80:bdf1132a57cf 77
mbed_official 80:bdf1132a57cf 78 wait_ms(100);
mbed_official 80:bdf1132a57cf 79 // Checking whether phy reset completed successfully.
mbed_official 80:bdf1132a57cf 80 {
mbed_official 80:bdf1132a57cf 81 unsigned short phyreset;
mbed_official 80:bdf1132a57cf 82 phyreset = 0;
mbed_official 80:bdf1132a57cf 83 smsc9220_phy_regread(SMSC9220_PHY_BCONTROL, &phyreset);
mbed_official 80:bdf1132a57cf 84 if(phyreset & (1 << 15)) {
mbed_official 80:bdf1132a57cf 85 error = TRUE;
mbed_official 80:bdf1132a57cf 86 return error;
mbed_official 80:bdf1132a57cf 87 }
mbed_official 80:bdf1132a57cf 88 }
mbed_official 80:bdf1132a57cf 89
mbed_official 80:bdf1132a57cf 90 /* Advertise capabilities */
mbed_official 80:bdf1132a57cf 91 smsc9220_advertise_cap();
mbed_official 80:bdf1132a57cf 92
mbed_official 80:bdf1132a57cf 93
mbed_official 80:bdf1132a57cf 94 /* Begin to establish link */
mbed_official 80:bdf1132a57cf 95 smsc9220_establish_link(); // bit [12] of BCONTROL seems self-clearing.
mbed_official 80:bdf1132a57cf 96 // Although it's not so in the manual.
mbed_official 80:bdf1132a57cf 97
mbed_official 80:bdf1132a57cf 98 /* Interrupt threshold */
mbed_official 80:bdf1132a57cf 99 SMSC9220->FIFO_INT = 0xFF000000;
mbed_official 80:bdf1132a57cf 100
mbed_official 80:bdf1132a57cf 101 smsc9220_enable_mac_xmit();
mbed_official 80:bdf1132a57cf 102
mbed_official 80:bdf1132a57cf 103 smsc9220_enable_xmit();
mbed_official 80:bdf1132a57cf 104
mbed_official 80:bdf1132a57cf 105 SMSC9220->RX_CFG = 0;
mbed_official 80:bdf1132a57cf 106
mbed_official 80:bdf1132a57cf 107 smsc9220_enable_mac_recv();
mbed_official 80:bdf1132a57cf 108
mbed_official 80:bdf1132a57cf 109 // Rx status FIFO level irq threshold
mbed_official 80:bdf1132a57cf 110 SMSC9220->FIFO_INT &= ~(0xFF); // Clear 2 bottom nibbles
mbed_official 80:bdf1132a57cf 111
mbed_official 80:bdf1132a57cf 112 // This sleep is compulsory otherwise txmit/receive will fail.
mbed_official 80:bdf1132a57cf 113 wait_ms(2000);
mbed_official 80:bdf1132a57cf 114 return error;
mbed_official 80:bdf1132a57cf 115
mbed_official 80:bdf1132a57cf 116 }
mbed_official 80:bdf1132a57cf 117
mbed_official 80:bdf1132a57cf 118 /*----------------------------------------------------------------------------
mbed_official 80:bdf1132a57cf 119 Ethernet Device Uninitialize
mbed_official 80:bdf1132a57cf 120 *----------------------------------------------------------------------------*/
mbed_official 80:bdf1132a57cf 121 void ethernet_free() {
mbed_official 80:bdf1132a57cf 122 }
mbed_official 80:bdf1132a57cf 123
mbed_official 80:bdf1132a57cf 124 int ethernet_write(const char *data, int size)
mbed_official 80:bdf1132a57cf 125 {
mbed_official 80:bdf1132a57cf 126 return 0;
mbed_official 80:bdf1132a57cf 127 }
mbed_official 80:bdf1132a57cf 128
mbed_official 80:bdf1132a57cf 129 int ethernet_send()
mbed_official 80:bdf1132a57cf 130 {
mbed_official 80:bdf1132a57cf 131 return 0;
mbed_official 80:bdf1132a57cf 132 }
mbed_official 80:bdf1132a57cf 133
mbed_official 80:bdf1132a57cf 134 int ethernet_receive()
mbed_official 80:bdf1132a57cf 135 {
mbed_official 80:bdf1132a57cf 136 return 0;
mbed_official 80:bdf1132a57cf 137 }
mbed_official 80:bdf1132a57cf 138
mbed_official 80:bdf1132a57cf 139 // Read from an recevied ethernet packet.
mbed_official 80:bdf1132a57cf 140 // After receive returnd a number bigger than 0 it is
mbed_official 80:bdf1132a57cf 141 // possible to read bytes from this packet.
mbed_official 80:bdf1132a57cf 142 // Read will write up to size bytes into data.
mbed_official 80:bdf1132a57cf 143 // It is possible to use read multible times.
mbed_official 80:bdf1132a57cf 144 // Each time read will start reading after the last read byte before.
mbed_official 80:bdf1132a57cf 145
mbed_official 80:bdf1132a57cf 146 int ethernet_read(char *data, int dlen)
mbed_official 80:bdf1132a57cf 147 {
mbed_official 80:bdf1132a57cf 148 return 0;
mbed_official 80:bdf1132a57cf 149 }
mbed_official 80:bdf1132a57cf 150
mbed_official 80:bdf1132a57cf 151 void ethernet_address(char *mac) {
mbed_official 80:bdf1132a57cf 152 mbed_mac_address(mac);
mbed_official 80:bdf1132a57cf 153 }
mbed_official 80:bdf1132a57cf 154
mbed_official 80:bdf1132a57cf 155 int ethernet_link(void)
mbed_official 80:bdf1132a57cf 156 {
mbed_official 80:bdf1132a57cf 157 return 0;
mbed_official 80:bdf1132a57cf 158 }
mbed_official 80:bdf1132a57cf 159
mbed_official 80:bdf1132a57cf 160 void ethernet_set_link(int speed, int duplex)
mbed_official 80:bdf1132a57cf 161 {
mbed_official 80:bdf1132a57cf 162 smsc9220_establish_link();
mbed_official 80:bdf1132a57cf 163 }
mbed_official 80:bdf1132a57cf 164