summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2002-11-21 21:38:58 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2002-11-21 21:38:58 +0000
commit6871977d821ed7487f91b520e39f655f5d61dc1f (patch)
treea2268f29af982d1057d594a35d00c4a4d58d459a
parent390e8f0ec6f1093170e4a51268dfab58d90b730e (diff)
downloadrockbox-6871977d821ed7487f91b520e39f655f5d61dc1f.zip
rockbox-6871977d821ed7487f91b520e39f655f5d61dc1f.tar.gz
rockbox-6871977d821ed7487f91b520e39f655f5d61dc1f.tar.bz2
rockbox-6871977d821ed7487f91b520e39f655f5d61dc1f.tar.xz
Optimized recording interrupt
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@2873 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/mpeg.c52
1 files changed, 31 insertions, 21 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index c5f036c..ce348f4 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -647,42 +647,52 @@ static void dma_tick(void)
else
{
int i;
- int num_bytes = 0;
+ int num_bytes;
if(is_recording && (PBDR & 0x4000))
{
#ifdef DEBUG
timing_info[timing_info_index++] = current_tick;
TCNT2 = 0;
#endif
- for(i = 0;i < 30 && (PBDR & 0x4000);i++)
+ if(inverted_pr)
{
- if(inverted_pr)
+ for(i = 0;PBDR & 0x4000;i++)
+ {
PADR |= 0x800;
- else
+
+ /* It must take at least 5 cycles before
+ the data is read */
+ mp3buf[mp3buf_write++] = *(unsigned char *)0x4000000;
+
PADR &= ~0x800;
-
- /* It must take at least 5 cycles before the data is read */
- mp3buf[mp3buf_write] = *(unsigned char *)0x4000000;
-
- if(inverted_pr)
+
+ if(mp3buf_write >= mp3buflen)
+ mp3buf_write = 0;
+ }
+ }
+ else
+ {
+ for(i = 0;PBDR & 0x4000;i++)
+ {
PADR &= ~0x800;
- else
+
+ /* It must take at least 5 cycles before
+ the data is read */
+ mp3buf[mp3buf_write++] = *(unsigned char *)0x4000000;
+
PADR |= 0x800;
-
- /* It must take at least 4 cycles before the next loop */
- num_rec_bytes++;
-
- mp3buf_write++;
- if(mp3buf_write >= mp3buflen)
- mp3buf_write = 0;
-
- num_bytes++;
+
+ if(mp3buf_write >= mp3buflen)
+ mp3buf_write = 0;
+ }
}
#ifdef DEBUG
- timing_info[timing_info_index++] = TCNT2 + (num_bytes << 16);
+ timing_info[timing_info_index++] = TCNT2 + (i << 16);
timing_info_index &= 0x3ff;
#endif
+ num_rec_bytes += i;
+
/* Signal to save the data if we are running out of buffer
space */
num_bytes = mp3buf_write - mp3buf_read;
@@ -1626,7 +1636,7 @@ static void mpeg_thread(void)
close(mpeg_file);
mpeg_file = -1;
-#if 0
+#ifdef DEBUG
{
int i;
for(i = 0;i < 512;i++)