C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" [4 @- v* X6 m. o2 M9 U! Kmain文件:
! Q* T/ U9 s; d' {1 W& ^- finterrupt void interrupt4(void)  
$ M# K& E  C% ?) H0 Z{9 @' `0 e0 H0 s+ K
  Uint32 sample;$ e# J0 D: x- S; a2 `7 c6 V
1 ~" J1 g% ~  g
  sample = input_sample(); // read L + R samples from ADC6 n; ]7 I' N0 ?9 _" C) R/ [) \
  output_sample(sample);   // write L + R samples to DAC
: R; O# z, u9 p+ t  @8 s2 G( }4 i  return;$ G- g8 ^1 F( ?  r' {5 |
}) i( ^& r: {5 g2 [6 U
. }* X# _; K2 v/ n
int main( void )+ l: ]! I2 W  k; i  z9 Y" Y# i
{
* {" F7 ^3 ]5 L) ~' ]
8 a- V! U! Q. B: C6 F8 \    /* Initialize BSL */
9 M9 f. a# q* ^; m& I4 r6 B! `    EVMC6747_init( );. C0 G3 R, I; N
        /* Call evmc6747_intr function */
+ u) y# a$ f. s    aic3106_init( );
9 g. v- d! G, D$ p; m% j" D  {        while(1);
+ C# i# F( T- P6 e; B}
5 b- D  N, N  o& D% S2 F) U: L5 A8 {4 N2 |0 @( L, F2 X; I

/ p/ D3 f4 t3 `  q7 a& `1 n9 ]+ Y' Haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) x' z( I* x9 W6 e! e9 L/* Initialize MCASP1 */2 |$ a% L: M( S7 ~5 ?
    mcasp = &MCASP_MODULE_1;
3 m1 u; |1 t% g" v' h    mcasp->regs->GBLCTL  = 0;       // Reset
, J3 q, n+ `5 o" w' U# k    mcasp->regs->RGBLCTL = 0;       // Reset RX
" ~# g0 P5 P- m) j    mcasp->regs->XGBLCTL = 0;       // Reset TX
! ~% `. q: w6 X  X5 c3 h7 Z+ B    mcasp->regs->PWRDEMU = 1;       // Free-running
, X$ h8 n9 }' b% `0 p/ X) e   // configure McASP0 receive registers0 V0 O+ J# K+ z6 a* a' G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% Z* U/ A, T  T, @* W7 ], R    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# Y' v6 X* \7 O, ?5 ]    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& U, Q& Z3 y3 [+ j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 \3 B9 y2 P! G$ [
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 m8 w. ^: O$ W) ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 {. I. ], j) {$ D    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 M- z7 f% T* v- u; d( y# k, ~( I. C    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c/ j7 Y, E* s

$ H! @; i# [6 @; x    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* W5 M2 T' j7 }3 c  u. N3 A5 O# j! j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 A2 h. {7 v) p4 \# O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: L9 \9 b0 o! t- E6 ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( x7 m- D4 y; l! E( @% H    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  T6 J9 x* X' A0 Z' c! H
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
, M8 F; a3 Z2 P* K1 ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 _& S, q  I8 r" `  q$ C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; b  K- b% _2 l, j, X" J1 t: Z- ?# X5 F! J8 @9 Y1 j; c5 w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& T$ j, M- o1 f, W" w
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 j8 E9 r- f7 y$ Y( Y    mcasp->regs->PFUNC      = 0;          // All MCASPs
; ^. _3 t4 p1 S, ?    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. V3 ~6 l: h  B$ x
2 y6 K% |$ ^, E$ V; W
    mcasp->regs->DITCTL     = 0x00000000; // Not used# b& B# ~3 h: B1 {% X. O  ]
    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ D$ h" {& B4 y  m, M* x* ]
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 c; c5 j+ \/ W0 N) U, @6 M1 h
3 K, g; Q+ C! _
/* Starting sections of the McASP*/+ n4 m4 }! C1 o6 G" b+ t1 K! r& n3 G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 G+ e, S. a5 y. E3 y. [0 Y$ M2 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& S0 g  @& ]3 B+ }/ m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 R+ T2 U2 F* w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 m5 i8 [. }- G9 F5 i- s; O
8 i! u- n( i, L6 X0 v
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   S4 v, x  t; v: O5 Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- m/ Y; v0 g" D' {% o1 q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! ^7 [3 q- R+ j& |, x5 U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& T% z+ T/ X* l3 G: R. j# K
# `, F6 f. ?1 X5 u/ K: |+ j. b    mcasp->regs->XSTAT = 0x0000ffff;
! n% L* P/ t% f" D5 o4 I    mcasp->regs->RSTAT = 0x0000ffff;
) y# L2 @( f, W8 x  ]/ q8 x) m6 b$ X! S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 ^$ G& H( L+ x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, w( X& n0 c( F' z% K    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % f( D' e5 ^4 H6 T) @: g  A9 H1 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. D! o* i. }( v  |+ ~
5 Y$ W2 F2 j7 x8 o; ~    /* Write a 0, so that no underrun occurs after releasing the state machine */& C, P* V' P9 h3 \' h( F
    mcasp->regs->XBUF5 = 0;
6 k2 [$ Z' b8 T' \" T    mcasp->regs->RBUF0 = 0;
  a: _2 [( E! N9 j  u  H" J
, @2 d1 `5 U! @2 i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 C9 g9 l+ D7 O" h' T0 H9 j8 Z3 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 O6 ]8 h; R3 }" R/ T0 ]    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
0 x' g5 P: x* t+ M6 q9 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; t  Q7 T1 s; _1 v! u9 n
0 Y4 H- _0 V: ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % }% H% B% p6 [" l( L' K7 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ ~, @- R4 @: C3 i" L( h! f1 ~& X' y; O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 G0 Z8 p4 V: }6 O) o$ z3 K" R3 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& a3 z- C! D  h/ T( y

7 P# A  s1 Z4 Y) G8 M+ S    CSR = 0x0000;
- v& J* v. l  H8 s8 }' |    INTC_INTMUX1 = 0x3d;& e( c" ?* \' T2 Z: Z$ W' s
    ISTP = (unsigned int)vectors;% k" Q! U5 r' Q& A/ k" c
    ICR = 0xFFF0;  5 O4 W3 V% G9 ~
    IER |= 0x12;  
( g5 i& O8 E  x7 e' D5 `- v    CSR |= 0x01;  
( u! C1 y4 l: T8 J
$ ]& h0 o3 k. P
& s' r7 z  R3 U+ |& z
; e; c  E9 B8 m0 e. i$ X% h0 I还有就是两个输入输出函数:7 p" H4 \  m! b  L, K* E2 A) E
void output_sample(Int32 out_data)( Q. ?2 @/ X4 X4 q3 I5 m1 Q
{
/ A, a" ~; x' O; A# T2 K1 \  AIC31_data.uint = out_data;  
( M0 u% m  X9 N2 w, O* n, l  MCASP1_XBUF5_32BIT = AIC31_data.uint;; C2 x8 G6 |' n
}
& X0 [5 V: u6 Z) x8 G5 p1 d1 u# @2 l" ]2 b4 H- ?
Int32 input_sample(void)
$ s7 S( P: D4 C5 g{  
0 R/ w1 F: Z4 c  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 X; L8 }9 [0 s+ T  return (AIC31_data.uint);
$ q1 n5 `( O1 P) }3 c0 S2 p, _}
+ q6 _! h8 M7 _1 w1 Y) \% e; Q3 `+ q2 U# Z7 `: {
分享到:  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, 2026-3-11 07:14 , Processed in 0.043504 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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