C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5757|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 r- b1 q; E1 M; a, `
main文件:6 E( b0 P  L- C
interrupt void interrupt4(void)  
$ ^2 T# _' y! a8 C% A{
* o/ s/ j( ?& k  Uint32 sample;* j+ p  x2 [6 @; v5 V
$ H) @+ J$ V. W) T" P* {
  sample = input_sample(); // read L + R samples from ADC
" N- z* s) |/ U# P. B  output_sample(sample);   // write L + R samples to DAC
& k: `2 h( w; y  return;
4 k6 N, `/ O3 p8 c- C% ?}
% D# A$ }5 n; }; b* m2 Y
4 u/ Q1 y" ^, J: |7 s+ C& Nint main( void )- B+ c: `# _2 I9 T& U
{
4 P: J& e9 O, ^: F# U) ~7 b5 S, i* f" k" A+ B9 ?
    /* Initialize BSL */
- M: C, B6 x9 O' ]    EVMC6747_init( );
  H3 q5 }& {* W$ K        /* Call evmc6747_intr function */" f5 w! o8 J  @) b. L. X6 u
    aic3106_init( );# h( C; A4 W! [. y
        while(1);
7 f& b" G( O4 ~2 p) ]: i}
4 T! f# L; o. t% F, K3 t$ ^5 M7 p
. U7 }- P7 Z8 N* ]& \
% Y; ^  \2 n% h5 @" V8 \# naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题! v" ^" n8 m7 E* w5 z  Y
/* Initialize MCASP1 */1 p  @: T9 u. y# ], x9 e3 C" n
    mcasp = &MCASP_MODULE_1;
9 p9 o% }7 |# G. `1 t    mcasp->regs->GBLCTL  = 0;       // Reset
2 n8 D0 D1 S) g3 J6 s( Z( T    mcasp->regs->RGBLCTL = 0;       // Reset RX  J9 Y; O2 G+ |  A( U3 B! y0 g/ I
    mcasp->regs->XGBLCTL = 0;       // Reset TX  z- x) m, l$ P
    mcasp->regs->PWRDEMU = 1;       // Free-running8 X( V$ \% y4 a
   // configure McASP0 receive registers
1 o9 x; c! k6 [/ ~: z# R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- i' Z4 B/ m) T  v: O6 X8 o
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: u) q! k5 ^/ K8 B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 e3 m! }0 b6 {4 Z6 w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 H& g4 ^: \. I- A8 U# [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ H; d9 d' g' c+ ?6 C' n" {
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: O8 D4 z% |/ E& w1 @) q5 }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 D  I, @" p9 P9 j( R% T    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! ?# L* S' o) t# j4 k/ F# L5 P
' v+ U- w2 Y. A
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* l% A8 W. K9 B$ ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- F) _1 I) _; a$ F. I    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& Z/ U) `( a* J6 s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
1 Y0 j- K, Y% B( A- {6 X4 s6 t1 `# @    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK8 W* y. p+ K$ ?7 t3 p4 U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; B/ v" |' w" }8 q6 L) ?% C# X, u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ {; U$ v% P$ D  |# g# X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 @6 c: T4 O( X+ {* |  ?, L; A( ?0 q. n9 \2 o! o
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  @* `% Z& E5 |6 v* A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 W; P9 x+ @/ J* v- m
    mcasp->regs->PFUNC      = 0;          // All MCASPs! C. R' E' A6 T) G4 S7 P
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
; b$ C/ v! ~/ E$ y1 }
( q7 q" k" H& @- B$ i    mcasp->regs->DITCTL     = 0x00000000; // Not used5 {' s6 |% l: L+ Q! Q! `; r$ Q2 i! d
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. n) B/ i( q4 z5 J* K% e    mcasp->regs->AMUTE      = 0x00000000; // Not used1 q: ^0 e  [7 U2 O! q  Z  y) ~$ q  H
5 r2 a8 t% b7 z- g
/* Starting sections of the McASP*/
! x/ i% {) x: A    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 ?+ |, l6 I; ^, Y9 [7 F/ X4 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' B" _/ h* b/ Q& U# O7 b" K$ [
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 f8 |+ D, e7 B) r9 L7 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* [, L( l/ @7 I5 L3 T1 c

% x$ c  m) z9 U4 u- l2 j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + G6 s' y1 J/ ^- C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 D& t" n1 K: X9 l/ p    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 h) I# h" E  F5 s9 U! o5 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 T( s6 W5 {; h6 K8 B2 u
0 @6 i+ ?1 k# B7 Z    mcasp->regs->XSTAT = 0x0000ffff;
, e# c1 s, ~& E  n0 f  `    mcasp->regs->RSTAT = 0x0000ffff;
6 Z/ b9 J1 Q' c. h" C, x, Y  U. f% y: H4 _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;7 D, @, K2 Y' G. }# t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. x1 f6 f0 J1 g- ^! n    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ D0 m/ {6 U  D: p, \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 r3 ^1 C* a- y% t1 g  R8 a4 l, F0 f7 c) f' [" k
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 u4 @# Q( b  ]: ~1 G" y8 d6 a7 u    mcasp->regs->XBUF5 = 0;
# d! v# c; b4 j' r2 P    mcasp->regs->RBUF0 = 0;
* s1 b9 Z$ \3 e8 e9 L1 P# b# Y- _6 v% t8 j7 H" ~1 ]& o. H0 n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( \! c- A8 ]2 p& d, r0 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( ~9 E( s4 }/ g# b2 c% `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 X0 L; g+ J: L! M. n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );. m# A4 b+ R. |2 |9 ~

0 q; T4 g2 D% }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 O# w2 X% q$ d7 ?" c$ o* K) N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ]5 U' ~& J' i" }. R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' m  q) g5 ^# ^: E/ ^: W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ A4 h9 F" G- r# k2 s! U5 Y3 q
2 J$ _! a6 f. g8 S, \    CSR = 0x0000;8 e- H3 B6 S% T
    INTC_INTMUX1 = 0x3d;1 }5 W: N! I" a# _# v
    ISTP = (unsigned int)vectors;
, T7 ~' W: Q! Q0 f, \( X    ICR = 0xFFF0;  5 W, a! b8 s9 @# g7 p
    IER |= 0x12;  " u) T1 [$ j0 ~( T3 M
    CSR |= 0x01;  2 U$ y" k- u+ D# |( j

, T6 H1 m6 e) M0 m3 |9 z; G0 p8 b: [: j3 E, r$ s

  a' ?6 u3 S# _7 \还有就是两个输入输出函数:! ^5 |3 p" J0 C: k0 N8 c
void output_sample(Int32 out_data). o8 O9 H5 M9 ?7 Y
{
2 k: C# s; {* {. O  AIC31_data.uint = out_data;  4 w: y/ K3 `3 `1 ?( ^9 H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 I/ W$ Q' |! `' V& a/ p& f
}/ S1 k+ Y! z+ Y$ P6 z

' N& Z) D" q  T% O/ Z" E; aInt32 input_sample(void)
6 V$ q: b; r9 O{  
- m  P! N  A& R+ F& L+ o% z  AIC31_data.uint = MCASP1_RBUF0_32BIT;) L* U# v4 F6 w1 H7 X
  return (AIC31_data.uint);
8 `* Y& S8 a" N. H}
; ~  F  Q7 Z& G) e
. s8 }# t0 |& ]( n( ?, ]3 u/ m1 T2 j5 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-9 10:39 , Processed in 0.040347 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表