嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% o/ `9 q; J2 t& `; u9 m
Void UPP_TASK(Void)
, ~. M! I3 w9 ?0 q; G
{
5 K0 g |) }% h( [; e: R! D
8 s! S# B7 h) C; |
int i,j,k,target_int_count=2;
& |8 Y) ~3 ~6 m7 H! w
char ch[2];
+ c0 h* q! k6 A
- R5 o1 d8 I9 ~: e
& {. R+ j% g, u- U% \
) q) ^ B7 j3 K$ c: s# n# S! [
upp_interrupt_count = 0;
; ?0 i6 i' `1 [& G' i2 P/ m/ f4 \
upp_error_count = 0;
7 a, v0 U$ w6 x( z/ f$ ~% }1 w* z5 i
! l9 A7 S2 ~/ k+ w. @. q' J
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, ?9 C0 d9 F* P8 l2 f
// Initialize data buffers
3 N9 G( X% A) F0 |) c
for (i = 0; i < upp_frame_size; i++)
1 u6 P, w; B+ b5 e. P: G% x
{
9 `' q/ P9 U0 F: ?% |$ v7 J
upp_buffer_b
=i;
[( v# Q( D& r5 T1 o
upp_buffer_a
= 0xDEAD;
0 B9 m* a' b n
}
5 L2 ]5 v" a: X5 O, o. o3 j+ M
% W4 \+ s3 Z* A4 [9 C. ~' x
//for(i=0;i<1024;i++)
6 O& e0 w6 \. a! V4 X+ u; T
// temp
=0;
* N, k, ?( ?8 K7 x- y, K
) j7 R1 {* q+ u/ v% k3 i5 t* T2 X
//UPPReset();
' [0 o6 C7 b$ h2 e/ l+ S
/*启动UPP DMA传输*/
' o3 S* g( S9 i+ `0 r& _% d' F
UARTPuts("upp_prog_dma_i\n",-2);
$ ]9 I+ S! o# E
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* D6 O3 m& J" ^$ _; f8 w( J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( K( L2 j1 U7 ~" L
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( l- j% l, u7 n) f& P' t
, P0 I, y4 ]3 c1 q+ p- ~1 q
UARTPuts("upp_prog_dma_i\n",-2);
# S' K1 V) X+ G2 g. G- L* [5 Y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
! x6 E2 |$ e: p: q+ W7 o w. a S3 [
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 _. ?# P# M6 u8 X
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 c6 q/ ?* S- [; X; ^+ _
( L9 x% l" t( |8 M- I% }
/*等待UPP传输完毕*/
; f: y7 d9 q8 U$ e
//i=0;
) k. j- C) A2 X
//j=0;
' J9 c" }( L$ T" z- h3 U
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: ?8 E( x. x" |1 D' i& f+ A
{
- P, S7 u0 v3 k: E$ S
/* 测试UPP传输的同时操作普通DDR数据
. R4 z# D8 H# K6 @+ b4 @, F' \' i
temp
=i;
, r: @. ?$ v- u2 L! h
i++;
4 B5 \6 c7 n: Q
if(i==1024)
& o3 u6 Q/ _# T$ F' W8 p
{
# c1 U+ \2 Q- { L2 t
i=0;
1 c& n4 h0 Z- X$ S A
j++;
% _$ b: d1 d, ?: e" c+ c
}
- k/ s# p; Y! C L A
*/
1 B7 _) F6 ?, M9 o2 B% y
5 k# e9 F: W( i% r9 s4 Z* W9 C, o
asm(" nop");
' u2 p. l4 \/ C+ Y9 \) d
" [; V! U9 a; F9 R
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, d* j h" Z- i/ S0 Y) s1 q
}
% J5 t9 q7 g. B1 B
' d8 X, m* j% \: m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ k6 y9 k& U0 L) p4 @) Y
//UARTprintf( "i=%d\n",i);
2 H/ ` R0 J: L. d& T
//UARTprintf( "j=%d\n",j);
* g) T+ D5 x. E
UARTPuts("Data mismatch in buffers.\n",-2);
0 F- d: s4 m4 A& ?0 g
if (upp_interrupt_count == 2 && upp_error_count == 0)
( @% k# Z" K" ]9 c
{
6 [+ K6 d2 H" l# X7 d& ]- f: X
for (i = 0; i<upp_frame_size; i++)
, Q; M6 A; ?1 m& l8 g% R
{
) @- N# F0 o3 x5 H L0 C
if (upp_buffer_a
!= upp_buffer_b
)
3 ]$ z) k% ~# Q2 u
{
" h% m" z1 d* t
upp_error_count++;
4 }+ u- d, \, p" V" h7 [; I T
}
2 v: a5 [* f* c% d4 d E$ c# [
}
2 N J: ]% ~, W) D& D+ D" h
}
5 v. a+ O5 O F
9 ^2 }2 d/ g4 T8 y6 d& j) g
/* 报告通信结果*/
* Z R# ? t3 X* {$ \/ o+ B; \
if(upp_error_count != 0)
- c9 A7 o8 S3 e6 i' e% s2 l' s
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 x& D4 j' W6 B, H
else
" }/ ] |* i v3 _* _1 }- s: M' q0 k
UARTPuts("uPP transfers complete!\n",-2);
0 Q% m" B7 t/ K
# ^9 ?) |9 r1 e# L1 k
UARTPuts("Do you want to print all the data?(y/n) ",-2);
[; H+ x" N' y$ Y8 q
UARTGets(ch,2);
/ U1 x, \7 b) S# J: j
UARTPuts("\n", -2);
# p c1 q( I! D5 J) _" F7 v' M( F
4 U1 ?3 L9 `9 s: ^! p/ ^0 u0 q
if(ch[0] == 'y')
, N8 l J3 v" I& ^: w; V
{
7 R. J; D0 c/ Y- G
/*打印全部读到的数据*/
" r0 ?) I0 r4 Q, U, _2 M" V y
for(i=0; i<upp_frame_size; )
; b' {( o4 P& \ e9 V3 `
{
1 d4 r- K: U" l6 S/ R5 G1 g& j; U, v4 b
for(j=0; j<5; j++)
2 S0 }# G9 C5 e) {
{
8 |( L& O$ D* f6 L/ P
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# c5 a2 e& e7 [* H% U0 t4 [
i++;
! [* H; n) W" n2 a6 r) F
//if(i >= 4096)
8 G' h# {" I# s9 X: g1 K0 D4 N
// break;
* C+ h7 M+ @1 a; ?" J! m) z
& s5 e+ T; \( y4 l. k/ ]2 t
}
8 B( E# l( D# j4 w
UARTPuts("\n",-2);
; q& ^3 a6 L' g% D1 B0 M; b
}
2 l6 b- V( K5 E9 o8 z7 P% ~; q2 R
}
) G5 |6 N- |! ]* M' Q/ ?6 i3 z
, h ~8 W1 D9 i: v' L
}
) }8 o! n% G- _2 z* z, g1 B. R3 s
8 C5 {( O) W, t% o$ p
1 c: v9 A' {$ i9 j. G& S, u
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
2 @9 t8 I- }* i3 V3 @
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 d/ P+ W0 U& J$ W# ~1 ]* u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4